Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] chromium: update to 120.0.6099.109.
@ 2023-12-13 17:44 Duncaen
  2023-12-13 17:59 ` [PR PATCH] [Updated] " Duncaen
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Duncaen @ 2023-12-13 17:44 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 407 bytes --]

There is a new pull request by Duncaen against master on the void-packages repository

https://github.com/Duncaen/void-packages chromium-120
https://github.com/void-linux/void-packages/pull/47739

chromium: update to 120.0.6099.109.
[ci skip]

* [x] x86_64-glibc
* [ ] x86_64-musl
* [ ] aarch64-musl
* [ ] i686

A patch file from https://github.com/void-linux/void-packages/pull/47739.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-chromium-120-47739.patch --]
[-- Type: text/x-diff, Size: 118369 bytes --]

From e3060fc2b5e831086175e624a8fcfd09d6f3300e Mon Sep 17 00:00:00 2001
From: Duncaen <duncaen@voidlinux.org>
Date: Wed, 13 Dec 2023 14:53:36 +0100
Subject: [PATCH] chromium: update to 120.0.6099.109.

---
 .../chromium-118-python-3.12-deprecated.patch | 138 -----
 ...karound_clang_bug-structured_binding.patch |  96 ----
 .../patches/chromium-119-constexpr.patch      |  12 -
 ...tVideoDecoder-flag-on-VA-API-devices.patch | 195 -------
 ...-119-nullptr_t-without-namespace-std.patch |  21 -
 ...a-use-separate-bo-to-verify-modifier.patch | 164 ------
 .../chromium-120-arm64-memory_tagging.patch   |  14 +
 ...hromium-120-disable-FFmpegAllowLists.patch |  12 +
 ...ble-GlobalMediaControlsCastStartStop.patch |  14 +
 ...chromium-120-el7-clang-build-failure.patch | 230 ++++++++
 ...ium-120-el7-clang-build-failure.patch.args |   1 +
 ...romium-120-el7-clang-version-warning.patch |  16 +
 .../chromium-120-gn-workaround-atspi.patch    |  13 +
 ...> chromium-120-missing-header-files.patch} |  11 -
 ...hromium-120-no_matching_constructor.patch} | 493 ++++++++++--------
 ...20-split-threshold-for-reg-with-hint.patch |  28 +
 ...name.patch => chromium-120-typename.patch} |  41 ++
 ...karound_clang_bug-structured_binding.patch |  51 ++
 ...x-aarch64-musl-memory-tagging-macros.patch |   4 +-
 .../chromium/patches/musl-no-execinfo.patch   |   9 -
 .../chromium/patches/musl-no-mallinfo.patch   |   8 +-
 .../patches/musl-partition-atfork.patch       |   4 +-
 srcpkgs/chromium/patches/no-mte.patch         |  11 -
 srcpkgs/chromium/template                     |  20 +-
 srcpkgs/chromium/update                       |   4 +-
 25 files changed, 708 insertions(+), 902 deletions(-)
 delete mode 100644 srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-constexpr.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
 rename srcpkgs/chromium/patches/{chromium-119-missing-header-files.patch => chromium-120-missing-header-files.patch} (97%)
 rename srcpkgs/chromium/patches/{chromium-119-no_matching_constructor.patch => chromium-120-no_matching_constructor.patch} (67%)
 create mode 100644 srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
 rename srcpkgs/chromium/patches/{chromium-117-typename.patch => chromium-120-typename.patch} (83%)
 create mode 100644 srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
 delete mode 100644 srcpkgs/chromium/patches/no-mte.patch

diff --git a/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch b/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
deleted file mode 100644
index 5837ae584117d..0000000000000
--- a/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-diff -up chromium-115.0.5790.102/base/write_build_date_header.py.me chromium-115.0.5790.102/base/write_build_date_header.py
---- chromium-115.0.5790.102/base/write_build_date_header.py.me	2023-07-22 14:23:42.620679397 +0200
-+++ chromium-115.0.5790.102/base/write_build_date_header.py	2023-07-22 15:24:46.833310310 +0200
-@@ -17,7 +17,7 @@ def main():
-   args = argument_parser.parse_args()
- 
-   date_val = int(args.timestamp)
--  date = datetime.datetime.utcfromtimestamp(date_val)
-+  date =  datetime.datetime.fromtimestamp(date_val, datetime.timezone.utc)
-   output = ('// Generated by //base/write_build_date_header.py\n'
-             '#ifndef BASE_GENERATED_BUILD_DATE_TIMESTAMP \n'
-             f'#define BASE_GENERATED_BUILD_DATE_TIMESTAMP {date_val}'
-diff -up chromium-115.0.5790.102/build/write_buildflag_header.py.me chromium-115.0.5790.102/build/write_buildflag_header.py
---- chromium-115.0.5790.102/build/write_buildflag_header.py.me	2023-07-22 14:16:14.196975451 +0200
-+++ chromium-115.0.5790.102/build/write_buildflag_header.py	2023-07-22 14:20:24.977239994 +0200
-@@ -44,7 +44,7 @@ def GetOptions():
-   header_guard = cmdline_options.output.upper()
-   if header_guard[0].isdigit():
-     header_guard = '_' + header_guard
--  header_guard = re.sub('[^\w]', '_', header_guard)
-+  header_guard = re.sub(r'[^\w]', '_', header_guard)
-   header_guard += '_'
- 
-   # The actual output file is inside the gen dir.
-diff -up chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py.me chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py
---- chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py.me	2023-07-22 14:47:34.230764210 +0200
-+++ chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py	2023-07-22 15:11:50.360983383 +0200
-@@ -9,7 +9,8 @@
- """
- from __future__ import print_function
- import abc
--import imp
-+import types
-+import importlib
- import optparse
- import os
- import re
-@@ -40,6 +41,12 @@ class GoogleProtobufModuleImporter:
-         return filepath
-     return None
- 
-+  def load_source(name: str, path: str) -> types.ModuleType:
-+    spec = importlib.util.spec_from_file_location(name, path)
-+    module = importlib.util.module_from_spec(spec)
-+    spec.loader.exec_module(module)
-+    return module
-+
-   def _module_exists(self, fullname):
-     return self._fullname_to_filepath(fullname) is not None
- 
-@@ -68,7 +75,7 @@ class GoogleProtobufModuleImporter:
-       raise ImportError(fullname)
- 
-     filepath = self._fullname_to_filepath(fullname)
--    return imp.load_source(fullname, filepath)
-+    return load_source(fullname, filepath)
- 
- class BinaryProtoGenerator:
- 
-diff -up chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py.me chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py
---- chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py.me	2023-07-22 15:17:19.114258801 +0200
-+++ chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py	2023-07-22 15:17:43.368200491 +0200
-@@ -32,7 +32,7 @@ def FilterLine(filename, line, output):
-     return
- 
-   if line.startswith("goog.provide"):
--    match = re.match("goog.provide\('([^']+)'\);", line)
-+    match = re.match(r"goog.provide\('([^']+)'\);", line)
-     if not match:
-       print("Invalid goog.provide line in %s:\n%s" % (filename, line))
-       sys.exit(1)
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py.me	2023-07-22 15:12:41.850895179 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py	2023-07-22 15:12:55.844871207 +0200
-@@ -18,7 +18,7 @@ class HTMLGenerationController(object):
- 
-   def GetHTMLForInlineStylesheet(self, contents):
-     if self.current_module is None:
--      if re.search('url\(.+\)', contents):
-+      if re.search(r'url\(.+\)', contents):
-         raise Exception(
-             'Default HTMLGenerationController cannot handle inline style urls')
-       return contents
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py.me	2023-07-22 15:14:06.923717910 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py	2023-07-22 15:18:03.704150614 +0200
-@@ -4,4 +4,4 @@
- 
- 
- def EscapeJSIfNeeded(js):
--  return js.replace('</script>', '<\/script>')
-+  return js.replace(r'</script>', r'<\/script>')
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py.me	2023-07-22 15:14:30.105662532 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py	2023-07-22 15:14:57.977595950 +0200
-@@ -293,6 +293,6 @@ class HTMLModuleParser():
-       html = ''
-     else:
-       if html.find('< /script>') != -1:
--        raise Exception('Escape script tags with <\/script>')
-+        raise Exception(r'Escape script tags with <\/script>')
- 
-     return HTMLModuleParserResults(html)
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py.me	2023-07-22 15:13:12.316842990 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py	2023-07-22 15:13:49.684759091 +0200
-@@ -60,7 +60,7 @@ class ParsedStyleSheet(object):
-       return 'url(data:image/%s;base64,%s)' % (ext[1:], data.decode('utf-8'))
- 
-     # I'm assuming we only have url()'s associated with images
--    return re.sub('url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-+    return re.sub(r'url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-                   InlineUrl, self.contents)
- 
-   def AppendDirectlyDependentFilenamesTo(self, dependent_filenames):
-@@ -72,7 +72,7 @@ class ParsedStyleSheet(object):
-       raise Exception('@imports are not supported')
- 
-     matches = re.findall(
--        'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-+        r'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-         self.contents)
- 
-     def resolve_url(url):
-diff -up chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py.me chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py
---- chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py.me	2023-07-22 15:11:56.826972306 +0200
-+++ chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py	2023-07-22 15:12:37.550902545 +0200
-@@ -119,8 +119,8 @@ class _PreprocessingLoader(jinja2.BaseLo
-             source = self.preprocess(f.read())
-         return source, path, lambda: mtime == os.path.getmtime(path)
- 
--    blockstart = re.compile('{%-?\s*(if|elif|else|for|block|macro)[^}]*%}')
--    blockend = re.compile('{%-?\s*(end(if|for|block|macro)|elif|else)[^}]*%}')
-+    blockstart = re.compile(r'{%-?\s*(if|elif|else|for|block|macro)[^}]*%}')
-+    blockend = re.compile(r'{%-?\s*(end(if|for|block|macro)|elif|else)[^}]*%}')
- 
-     def preprocess(self, source):
-         lines = source.split('\n')
diff --git a/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch b/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
deleted file mode 100644
index 3b79f512487ae..0000000000000
--- a/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-diff -up chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc
---- chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:37.000000000 +0200
-+++ chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc	2023-06-17 16:53:20.216628557 +0200
-@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui
- void CdmPromiseAdapter::Clear(ClearReason reason) {
-   // Reject all outstanding promises.
-   DCHECK(thread_checker_.CalledOnValidThread());
--  for (auto& [promise_id, promise] : promises_) {
-+  for (auto& [p_i, p_e] : promises_) {
-+    auto& promise_id = p_i;
-+    auto& promise = p_e;
-     TRACE_EVENT_NESTABLE_ASYNC_END1(
-         "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id),
-         "status", "cleared");
-diff -up chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
---- chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:41.000000000 +0200
-+++ chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc	2023-06-17 18:47:06.001403966 +0200
-@@ -655,8 +658,10 @@ NGGridSizingTree NGGridLayoutAlgorithm::
-   NGGridSizingTree sizing_tree;
- 
-   if (const auto* layout_subtree = ConstraintSpace().GridLayoutSubtree()) {
--    auto& [grid_items, layout_data, subtree_size] =
--        sizing_tree.CreateSizingData();
-+    auto& [g_i, l_d, s_s] = sizing_tree.CreateSizingData();
-+    auto& grid_items = g_i;
-+    auto& layout_data = l_d;
-+    auto& subtree_size = s_s;
- 
-     const auto& node = Node();
-     grid_items =
-@@ -1798,8 +1803,10 @@ void NGGridLayoutAlgorithm::CompleteTrac
-     bool* opt_needs_additional_pass) const {
-   DCHECK(sizing_subtree);
- 
--  auto& [grid_items, layout_data, subtree_size] =
--      sizing_subtree.SubtreeRootData();
-+  auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData();
-+  auto& grid_items = g_i;
-+  auto& layout_data = l_d;
-+  auto& subtree_size = s_s;
- 
-   const bool is_for_columns = track_direction == kForColumns;
-   const bool has_non_definite_track =
-@@ -1924,8 +1931,10 @@ template <typename CallbackFunc>
- void NGGridLayoutAlgorithm::ForEachSubgrid(
-     const NGGridSizingSubtree& sizing_subtree,
-     const CallbackFunc& callback_func) const {
--  auto& [grid_items, layout_data, subtree_size] =
--      sizing_subtree.SubtreeRootData();
-+  auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData();
-+  auto& grid_items = g_i;
-+  auto& layout_data = l_d;
-+  auto& subtree_size = s_s;
- 
-   // If we know this subtree doesn't have nested subgrids we can exit early
-   // instead of iterating over every grid item looking for them.
-diff -up chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc
---- chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me	2023-06-19 08:04:02.287072722 +0200
-+++ chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc	2023-06-19 08:18:24.576814950 +0200
-@@ -1393,7 +1393,8 @@ void ServiceWorkerContextWrapper::MaybeP
-     return;
-   }
- 
--  auto [document_url, key, callback] = std::move(*request);
-+  auto [d_u, key, callback] = std::move(*request);
-+  auto document_url = d_u;
- 
-   DCHECK(document_url.is_valid());
-   TRACE_EVENT1("ServiceWorker",
-diff -up chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.me chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
---- chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.me	2023-09-15 13:03:00.787257048 +0200
-+++ chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc	2023-09-15 13:15:05.502706522 +0200
-@@ -3437,7 +3437,10 @@ void NGGridLayoutAlgorithm::PlaceGridIte
-   DCHECK(out_row_break_between);
- 
-   const auto& container_space = ConstraintSpace();
--  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
-+  const auto& [g_i, l_d, t_s] = sizing_tree.TreeRootData();
-+  const auto& grid_items = g_i;
-+  const auto& layout_data = l_d;
-+  const auto& tree_size = t_s;
- 
-   const auto* cached_layout_subtree = container_space.GridLayoutSubtree();
-   const auto container_writing_direction =
-@@ -3601,7 +3604,10 @@ void NGGridLayoutAlgorithm::PlaceGridIte
- 
-   // TODO(ikilpatrick): Update |SetHasSeenAllChildren| and early exit if true.
-   const auto& constraint_space = ConstraintSpace();
--  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
-+  const auto& [g_i, l_d, t_s] = sizing_tree.TreeRootData();
-+  const auto& grid_items = g_i;
-+  const auto& layout_data = l_d;
-+  const auto& tree_size =t_s;
- 
-   const auto* cached_layout_subtree = constraint_space.GridLayoutSubtree();
-   const auto container_writing_direction =
diff --git a/srcpkgs/chromium/patches/chromium-119-constexpr.patch b/srcpkgs/chromium/patches/chromium-119-constexpr.patch
deleted file mode 100644
index b195ff408ba81..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-constexpr.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h.me chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h
---- chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h.me	2023-10-31 21:05:05.548565241 +0100
-+++ chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h	2023-10-31 21:20:53.945532094 +0100
-@@ -93,7 +93,7 @@ class MiracleParameter {
- template <>
- class MiracleParameter<std::string> : public MiracleParameterBase<std::string> {
-  public:
--  constexpr MiracleParameter(const base::Feature* feature,
-+  MiracleParameter(const base::Feature* feature,
-                              const char* param_name,
-                              std::string default_value)
-       : MiracleParameterBase(feature, param_name, std::move(default_value)) {}
diff --git a/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch b/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
deleted file mode 100644
index 88d675e8047f0..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
+++ /dev/null
@@ -1,195 +0,0 @@
-commit 87fca7f1759e800bd72b5ab6511eea17d6400a76
-Author: Pilar Molina Lopez <pmolinalopez@chromium.org>
-Date:   Tue Oct 24 19:57:55 2023 +0000
-
-    video: hide UseChromeOSDirectVideoDecoder flag on VA-API devices
-    
-    We are seeing crashes causes by this CHECK statement:
-    https://source.chromium.org/chromium/chromium/src/+/main:content/public/browser/gpu_utils.cc;l=151;drc=0e777ba9b6c34611705d5b145c92bcd09539011c
-    It's triggered when the user manually disables the UseChromeOSDirectVideoDecoder
-    flag on VA-API devices (Intel and AMD). This flag is supported only on
-    non-Intel and non-AMD devices. This CL adds this information to the flag
-    description and hides the flag in case VA-API is used.
-    
-    Bug: 1469285
-    Test: manual test on volteer
-    Change-Id: I153b9ccb3815498c91ce5eee966834060749e247
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4960919
-    Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
-    Reviewed-by: Andres Calderon Jaramillo <andrescj@chromium.org>
-    Reviewed-by: Avi Drissman <avi@chromium.org>
-    Commit-Queue: Pilar Molina Lopez <pmolinalopez@chromium.org>
-    Cr-Commit-Position: refs/heads/main@{#1214411}
-
-diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
-index ee9fb206cde36..0fe18013ab044 100644
---- a/chrome/browser/DEPS
-+++ b/chrome/browser/DEPS
-@@ -418,6 +418,7 @@ include_rules = [
-   "+media/base",  # For media switches
-   "+media/capabilities", # For InMemoryVideoDecodeStatsDB
-   "+media/cdm",
-+  "+media/gpu/buildflags.h",
-   "+media/remoting/device_capability_checker.h",
-   "+media/capture",
-   "+media/midi",  # For midi switches
-diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
-index 84709afaa34d0..777bebeb33d9e 100644
---- a/chrome/browser/about_flags.cc
-+++ b/chrome/browser/about_flags.cc
-@@ -7578,11 +7578,13 @@ const FeatureEntry kFeatureEntries[] = {
- #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
- 
- #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-+#if !BUILDFLAG(USE_VAAPI)
-     {"chromeos-direct-video-decoder",
-      flag_descriptions::kChromeOSDirectVideoDecoderName,
-      flag_descriptions::kChromeOSDirectVideoDecoderDescription,
-      kOsCrOS | kOsLacros,
-      FEATURE_VALUE_TYPE(media::kUseChromeOSDirectVideoDecoder)},
-+#endif  // !BUILDFLAG(USE_VAAPI)
- 
-     {"enable-vbr-encode-acceleration",
-      flag_descriptions::kChromeOSHWVBREncodingName,
-diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
-index 318a8be9ab1a6..d2497d0c403f3 100644
---- a/chrome/browser/flag_descriptions.cc
-+++ b/chrome/browser/flag_descriptions.cc
-@@ -7,6 +7,7 @@
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "components/supervised_user/core/common/buildflags.h"
-+#include "media/gpu/buildflags.h"
- #include "pdf/buildflags.h"
- 
- // Keep in identical order as the header file, see the comment at the top
-@@ -7338,6 +7339,7 @@ const char kQuickOfficeForceFileDownloadDescription[] =
- #endif  // BUILDFLAG(IS_CHROMEOS)
- 
- #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-+#if !BUILDFLAG(USE_VAAPI)
- const char kChromeOSDirectVideoDecoderName[] = "ChromeOS Direct Video Decoder";
- const char kChromeOSDirectVideoDecoderDescription[] =
-     "Enables the hardware-accelerated ChromeOS direct media::VideoDecoder "
-@@ -7345,7 +7347,8 @@ const char kChromeOSDirectVideoDecoderDescription[] =
-     "--platform-disallows-chromeos-direct-video-decoder command line switch "
-     "which is added for platforms where said direct VideoDecoder does not work "
-     "or is not well tested (see the disable_cros_video_decoder USE flag in "
--    "ChromeOS)";
-+    "ChromeOS). This flag is supported only on non-Intel and non-AMD devices.";
-+#endif  // !BUILDFLAG(USE_VAAPI)
- const char kChromeOSHWVBREncodingName[] =
-     "ChromeOS Hardware Variable Bitrate Encoding";
- const char kChromeOSHWVBREncodingDescription[] =
-diff --git a/content/public/browser/gpu_utils.cc b/content/public/browser/gpu_utils.cc
-index dceeca9659a85..3d091359777cc 100644
---- a/content/public/browser/gpu_utils.cc
-+++ b/content/public/browser/gpu_utils.cc
-@@ -133,20 +133,26 @@ const gpu::GpuPreferences GetGpuPreferencesFromCommandLine() {
- #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-   // The direct VideoDecoder is disallowed on some particular SoC/platforms.
-   const bool should_use_direct_video_decoder =
-+#if BUILDFLAG(USE_VAAPI)
-+      true;
-+#else
-       !command_line->HasSwitch(
-           switches::kPlatformDisallowsChromeOSDirectVideoDecoder) &&
-       base::FeatureList::IsEnabled(media::kUseChromeOSDirectVideoDecoder);
-+#endif  // BUILDFLAG(USE_VAAPI)
-+
-+  gpu_preferences.enable_chromeos_direct_video_decoder =
-+#if BUILDFLAG(USE_VAAPI)
-+      should_use_direct_video_decoder;
-+#else
-+      // For testing purposes, the following flag allows using the "other" video
-+      // decoder implementation.
-+      base::FeatureList::IsEnabled(
-+          media::kUseAlternateVideoDecoderImplementation)
-+          ? !should_use_direct_video_decoder
-+          : should_use_direct_video_decoder;
-+#endif  // BUILDFLAG(USE_VAAPI)
- 
--  // For testing purposes, the following flag allows using the "other" video
--  // decoder implementation.
--  if (base::FeatureList::IsEnabled(
--          media::kUseAlternateVideoDecoderImplementation)) {
--    gpu_preferences.enable_chromeos_direct_video_decoder =
--        !should_use_direct_video_decoder;
--  } else {
--    gpu_preferences.enable_chromeos_direct_video_decoder =
--        should_use_direct_video_decoder;
--  }
- #if BUILDFLAG(USE_VAAPI)
-   CHECK(gpu_preferences.enable_chromeos_direct_video_decoder);
- #endif  // BUILDFLAG(USE_VAAPI)
-diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
-index 1af4de46e2a02..3086b1bec2134 100644
---- a/media/base/media_switches.cc
-+++ b/media/base/media_switches.cc
-@@ -1192,6 +1192,7 @@ BASE_FEATURE(kChromeOSHWVBREncoding,
-              "ChromeOSHWVBREncoding",
-              base::FEATURE_DISABLED_BY_DEFAULT);
- 
-+#if !BUILDFLAG(USE_VAAPI)
- // Enable the hardware-accelerated direct video decoder instead of the one
- // needing the VdaVideoDecoder adapter. This flag is used mainly as a
- // chrome:flag for developers debugging issues as well as to be able to
-@@ -1200,6 +1201,7 @@ BASE_FEATURE(kChromeOSHWVBREncoding,
- BASE_FEATURE(kUseChromeOSDirectVideoDecoder,
-              "UseChromeOSDirectVideoDecoder",
-              base::FEATURE_ENABLED_BY_DEFAULT);
-+#endif  // !BUILDFLAG(USE_VAAPI)
- 
- // Limit the number of concurrent hardware decoder instances on ChromeOS.
- BASE_FEATURE(kLimitConcurrentDecoderInstances,
-@@ -1228,7 +1230,7 @@ BASE_FEATURE(kPreferSoftwareMT21,
-              "PreferSoftwareMT21",
-              base::FEATURE_DISABLED_BY_DEFAULT);
- #endif  // defined(ARCH_CPU_ARM_FAMILY)
--#if BUILDFLAG(IS_CHROMEOS)
-+#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- // ChromeOS has one of two VideoDecoder implementations active based on
- // SoC/board specific configurations that are sent via command line flags. This
- // switch allows using the non default implementation for testing.
-@@ -1236,7 +1238,7 @@ BASE_FEATURE(kPreferSoftwareMT21,
- BASE_FEATURE(kUseAlternateVideoDecoderImplementation,
-              "UseAlternateVideoDecoderImplementation",
-              base::FEATURE_DISABLED_BY_DEFAULT);
--#endif  // BUILDFLAG(IS_CHROMEOS)
-+#endif  // BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- 
- #if BUILDFLAG(IS_WIN)
-diff --git a/media/base/media_switches.h b/media/base/media_switches.h
-index 1d9c2c2d9df73..96d9595be110e 100644
---- a/media/base/media_switches.h
-+++ b/media/base/media_switches.h
-@@ -14,6 +14,7 @@
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "media/base/media_export.h"
-+#include "media/gpu/buildflags.h"
- #include "media/media_buildflags.h"
- 
- namespace base {
-@@ -381,16 +382,18 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kBuiltInHlsPlayer);
- #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kChromeOSHWAV1Decoder);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kChromeOSHWVBREncoding);
-+#if !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseChromeOSDirectVideoDecoder);
-+#endif  // !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kLimitConcurrentDecoderInstances);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUSeSequencedTaskRunnerForVEA);
- #if defined(ARCH_CPU_ARM_FAMILY)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kPreferGLImageProcessor);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kPreferSoftwareMT21);
- #endif  // defined(ARCH_CPU_ARM_FAMILY)
--#if BUILDFLAG(IS_CHROMEOS)
-+#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseAlternateVideoDecoderImplementation);
--#endif  // BUILDFLAG(IS_CHROMEOS)
-+#endif  // BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- 
- #if BUILDFLAG(IS_WIN)
diff --git a/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch b/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
deleted file mode 100644
index 5cb969f4f40cf..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h.me chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h
---- chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h.me	2023-10-27 20:07:16.421230815 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h	2023-10-27 20:07:36.883600085 +0200
-@@ -52,7 +52,7 @@ class FragmentDataIterator
-  public:
-   explicit FragmentDataIterator(const LayoutObject& object)
-       : FragmentDataIteratorBase(&object.FirstFragment()) {}
--  explicit FragmentDataIterator(nullptr_t)
-+  explicit FragmentDataIterator(std::nullptr_t)
-       : FragmentDataIteratorBase(nullptr) {}
- };
- 
-@@ -63,7 +63,7 @@ class MutableFragmentDataIterator
-   explicit MutableFragmentDataIterator(const LayoutObject& object)
-       : FragmentDataIteratorBase(
-             &object.GetMutableForPainting().FirstFragment()) {}
--  explicit MutableFragmentDataIterator(nullptr_t)
-+  explicit MutableFragmentDataIterator(std::nullptr_t)
-       : FragmentDataIteratorBase(nullptr) {}
- };
- 
diff --git a/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch b/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
deleted file mode 100644
index 717d897446c7c..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-commit bdcc23e0a5e7e220660d3f54c97262f9a4c31606
-Author: Nick Diego Yamane <nickdiego@igalia.com>
-Date:   Thu Nov 2 17:26:25 2023 +0000
-
-    gbm: nvidia: use separate bo to verify modifiers
-    
-    Buggy Nvidia drivers fail to return FDs for planes of a BO which had
-    already an imported BO destroyed before. This is a workaround for that
-    issue, which consists of creating/destroying a separate 1x1 BO for
-    validating the modifiers before actually creating the final requested
-    BO, which for now is limited to IS_LINUX builds.
-    
-    The Nvidia driver bug is being tracked under internal bug 4315529. There
-    seems to be other issues when running under Wayland with Nvidia, which
-    will be tracked and addressed in separate patches.
-    
-    R=dcastagna, msisov@igalia.com
-    
-      with ozone/wayland backend and verify GPU acceleration is not broken.
-    
-    Test: In a single Nvidia GPU setup, with proprietary driver, run Chrome
-    Bug: 1273758, 1478684, 1463851
-    Change-Id: I9f322bcf40b460bcd4ead02f05dd2e9a8d271cea
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4989782
-    Reviewed-by: Maksim Sisov <msisov@igalia.com>
-    Commit-Queue: Nick Yamane <nickdiego@igalia.com>
-    Cr-Commit-Position: refs/heads/main@{#1218924}
-
-diff --git a/ui/gfx/linux/gbm_wrapper.cc b/ui/gfx/linux/gbm_wrapper.cc
-index bf90b76605f68..14918c19c0ab0 100644
---- a/ui/gfx/linux/gbm_wrapper.cc
-+++ b/ui/gfx/linux/gbm_wrapper.cc
-@@ -11,6 +11,7 @@
- #include "base/logging.h"
- #include "base/memory/raw_ptr.h"
- #include "base/memory/raw_ptr_exclusion.h"
-+#include "base/numerics/safe_conversions.h"
- #include "base/posix/eintr_wrapper.h"
- #include "skia/ext/legacy_display_globals.h"
- #include "third_party/skia/include/core/SkSurface.h"
-@@ -71,6 +72,7 @@ base::ScopedFD GetPlaneFdForBo(gbm_bo* bo, size_t plane) {
-   int ret;
-   // Use DRM_RDWR to allow the fd to be mappable in another process.
-   ret = drmPrimeHandleToFD(dev_fd, plane_handle, DRM_CLOEXEC | DRM_RDWR, &fd);
-+  PLOG_IF(ERROR, ret != 0) << "Failed to get fd for plane.";
- 
-   // Older DRM implementations blocked DRM_RDWR, but gave a read/write mapping
-   // anyways
-@@ -301,58 +303,82 @@ class Device final : public ui::GbmDevice {
- 
-   std::unique_ptr<ui::GbmBuffer> CreateBufferWithModifiers(
-       uint32_t format,
--      const gfx::Size& size,
-+      const gfx::Size& requested_size,
-       uint32_t flags,
-       const std::vector<uint64_t>& modifiers) override {
--    if (modifiers.empty())
--      return CreateBuffer(format, size, flags);
--
--    std::vector<uint64_t> filtered_modifiers =
--        GetFilteredModifiers(format, flags, modifiers);
--    struct gbm_bo* bo = nullptr;
--    while (filtered_modifiers.size() > 0) {
--      bo = gbm_bo_create_with_modifiers(device_, size.width(), size.height(),
--                                        format, filtered_modifiers.data(),
--                                        filtered_modifiers.size());
--      if (!bo) {
-+    if (modifiers.empty()) {
-+      return CreateBuffer(format, requested_size, flags);
-+    }
-+
-+    // Buggy drivers prevent us from getting plane FDs from a BO which had its
-+    // previously imported BO destroyed. E.g: Nvidia. Thus, on Linux Desktop, we
-+    // do the create/import modifiers validation loop below using a separate set
-+    // of 1x1 BOs which are destroyed before creating the final BO creation used
-+    // to instantiate the returned GbmBuffer.
-+    gfx::Size size =
-+#if BUILDFLAG(IS_LINUX)
-+        gfx::Size(1, 1);
-+#else
-+        requested_size;
-+#endif
-+    auto filtered_modifiers = GetFilteredModifiers(format, flags, modifiers);
-+    struct gbm_bo* created_bo = nullptr;
-+    bool valid_modifiers = false;
-+
-+    while (!valid_modifiers && !filtered_modifiers.empty()) {
-+      created_bo = gbm_bo_create_with_modifiers(
-+          device_, size.width(), size.height(), format,
-+          filtered_modifiers.data(), filtered_modifiers.size());
-+      if (!created_bo) {
-         return nullptr;
-       }
- 
--      struct gbm_import_fd_modifier_data fd_data;
--      fd_data.width = size.width();
--      fd_data.height = size.height();
--      fd_data.format = format;
--      fd_data.num_fds = gbm_bo_get_plane_count(bo);
--      fd_data.modifier = gbm_bo_get_modifier(bo);
--
--      // Store fds in the vector of base::ScopedFDs. Will be released
--      // automatically.
-+      const int planes_count = gbm_bo_get_plane_count(created_bo);
-+      struct gbm_import_fd_modifier_data fd_data = {
-+          .width = base::checked_cast<uint32_t>(size.width()),
-+          .height = base::checked_cast<uint32_t>(size.height()),
-+          .format = format,
-+          .num_fds = base::checked_cast<uint32_t>(planes_count),
-+          .modifier = gbm_bo_get_modifier(created_bo)};
-+      // Store fds in a base::ScopedFDs vector. Will be released automatically.
-       std::vector<base::ScopedFD> fds;
-       for (size_t i = 0; i < static_cast<size_t>(fd_data.num_fds); ++i) {
--        fds.emplace_back(GetPlaneFdForBo(bo, i));
-+        fds.emplace_back(GetPlaneFdForBo(created_bo, i));
-         fd_data.fds[i] = fds.back().get();
--        fd_data.strides[i] = gbm_bo_get_stride_for_plane(bo, i);
--        fd_data.offsets[i] = gbm_bo_get_offset(bo, i);
-+        fd_data.strides[i] = gbm_bo_get_stride_for_plane(created_bo, i);
-+        fd_data.offsets[i] = gbm_bo_get_offset(created_bo, i);
-       }
- 
--      struct gbm_bo* bo_import =
-+      struct gbm_bo* imported_bo =
-           gbm_bo_import(device_, GBM_BO_IMPORT_FD_MODIFIER, &fd_data, flags);
--      if (bo_import) {
--        gbm_bo_destroy(bo_import);
--        break;
-+
-+      if (imported_bo) {
-+        valid_modifiers = true;
-+        gbm_bo_destroy(imported_bo);
-       } else {
--        gbm_bo_destroy(bo);
--        bo = nullptr;
-         AddModifierToBlocklist(format, flags, fd_data.modifier);
-         filtered_modifiers =
-             GetFilteredModifiers(format, flags, filtered_modifiers);
-       }
-+
-+      if (!valid_modifiers || size != requested_size) {
-+        gbm_bo_destroy(created_bo);
-+        created_bo = nullptr;
-+      }
-     }
--    if (!bo) {
--      return nullptr;
-+
-+    // If modifiers were successfully verified though `created_bo` is null here,
-+    // it it means that the buffer created for verification could not be reused,
-+    // ie: different size, so create it now with the `requested_size`.
-+    if (valid_modifiers && !created_bo) {
-+      created_bo = gbm_bo_create_with_modifiers(
-+          device_, requested_size.width(), requested_size.height(), format,
-+          filtered_modifiers.data(), filtered_modifiers.size());
-+      PLOG_IF(ERROR, !created_bo) << "Failed to create BO with modifiers.";
-     }
- 
--    return CreateBufferForBO(bo, format, size, flags);
-+    return created_bo ? CreateBufferForBO(created_bo, format, size, flags)
-+                      : nullptr;
-   }
- 
-   std::unique_ptr<ui::GbmBuffer> CreateBufferFromHandle(
diff --git a/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch b/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
new file mode 100644
index 0000000000000..bb461ef3664a2
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
@@ -0,0 +1,14 @@
+--- chromium-120.0.6099.35/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h.than	2023-11-26 13:50:07.005519877 +0100
++++ chromium-120.0.6099.35/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h	2023-11-26 13:50:49.727267240 +0100
+@@ -152,10 +152,7 @@
+   (!BUILDFLAG(PUT_REF_COUNT_IN_PREVIOUS_SLOT) && \
+    defined(ARCH_CPU_LITTLE_ENDIAN))
+ 
+-#define PA_CONFIG_HAS_MEMORY_TAGGING()              \
+-  (defined(ARCH_CPU_ARM64) && defined(__clang__) && \
+-   !defined(ADDRESS_SANITIZER) &&                   \
+-   (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
++#define PA_CONFIG_HAS_MEMORY_TAGGING() 0
+ 
+ #if PA_CONFIG(HAS_MEMORY_TAGGING)
+ static_assert(sizeof(void*) == 8);
diff --git a/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch b/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
new file mode 100644
index 0000000000000..98216ddb465ca
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
@@ -0,0 +1,12 @@
+diff -up chromium-120.0.6099.56/media/base/media_switches.cc.me chromium-120.0.6099.56/media/base/media_switches.cc
+--- chromium-120.0.6099.56/media/base/media_switches.cc.me	2023-12-02 11:43:21.990775897 +0100
++++ chromium-120.0.6099.56/media/base/media_switches.cc	2023-12-02 11:45:23.248006377 +0100
+@@ -1636,7 +1636,7 @@ BASE_FEATURE(kUseSharedImagesForPepperVi
+ // Enables FFmpeg allow lists for supported codecs / containers.
+ BASE_FEATURE(kFFmpegAllowLists,
+              "FFmpegAllowLists",
+-             base::FEATURE_ENABLED_BY_DEFAULT);
++             base::FEATURE_DISABLED_BY_DEFAULT);
+ 
+ #if BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS)
+ // Allows decoding of theora / vp3 content.
diff --git a/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch b/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
new file mode 100644
index 0000000000000..6a2585b953c3b
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
@@ -0,0 +1,14 @@
+--- chromium-120.0.6099.35/chrome/browser/media/router/media_router_feature.cc.orig	2023-11-26 13:25:34.724228755 +0100
++++ chromium-120.0.6099.35/chrome/browser/media/router/media_router_feature.cc	2023-11-26 13:28:26.452359146 +0100
+@@ -71,11 +71,7 @@
+ // TODO(b/202294946): Remove when enabled by default on ChromeOS.
+ BASE_FEATURE(kGlobalMediaControlsCastStartStop,
+              "GlobalMediaControlsCastStartStop",
+-#if BUILDFLAG(IS_CHROMEOS)
+              base::FEATURE_DISABLED_BY_DEFAULT);
+-#else
+-             base::FEATURE_ENABLED_BY_DEFAULT);
+-#endif  // BUILDFLAG(IS_CHROMEOS)
+ #endif  // !BUILDFLAG(IS_ANDROID)
+ 
+ namespace {
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
new file mode 100644
index 0000000000000..96258e67aaebb
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
@@ -0,0 +1,230 @@
+commit 57526b8dc45b2e6c67bba7306f1dde73b1f2910c
+Author: sisidovski <sisidovski@chromium.org>
+Date:   Tue Oct 24 09:32:49 2023 +0000
+
+    Remove unused items from the RaceNetworkRequest hashmap
+    
+    When the AutoPreload or the race-network-and-fetch-handler option in the
+    static routing API is enabled, network requests are dispatched and
+    URLLoaderFactories are held in a hashmap in ServiceWorkerGlobalScope.
+    Those are consumed inside the fetch handler when fetch(e.request) is
+    called. But if the fetch handler doesn't call fetch() e.g. fallback,
+    those hashmap items does not have a chance to be removed.
+    
+    This CL changes the hashmap items to be removed when the fetch event
+    finishes, and the URLLoaderFactory is still not consumed at that time.
+    This may loose the dedupe capability if fetch() is called later e.g.
+    setTimeout(() => fetch()), but it makes sense to prioritize keeping the
+    hashmap small.
+    
+    Change-Id: I51bdc9d5eb5185f2b5b4df6ee785715b1180c848
+    Bug: 1492640
+    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4964840
+    Reviewed-by: Minoru Chikamune <chikamune@chromium.org>
+    Commit-Queue: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+    Reviewed-by: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+    Cr-Commit-Position: refs/heads/main@{#1214064}
+
+diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+index 02887edc10883..b3624fc0162df 100644
+--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
++++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+@@ -46,6 +46,7 @@
+ #include "services/network/public/cpp/cross_origin_embedder_policy.h"
+ #include "services/network/public/mojom/cookie_manager.mojom-blink.h"
+ #include "services/network/public/mojom/cross_origin_embedder_policy.mojom.h"
++#include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
+ #include "third_party/blink/public/common/features.h"
+ #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
+ #include "third_party/blink/public/mojom/notifications/notification.mojom-blink.h"
+@@ -1096,6 +1097,10 @@ void ServiceWorkerGlobalScope::DidHandleFetchEvent(
+       TRACE_ID_WITH_SCOPE(kServiceWorkerGlobalScopeTraceScope,
+                           TRACE_ID_LOCAL(event_id)),
+       TRACE_EVENT_FLAG_FLOW_IN, "status", MojoEnumToString(status));
++
++  // Delete the URLLoaderFactory for the RaceNetworkRequest if it's not used.
++  RemoveItemFromRaceNetworkRequests(event_id);
++
+   if (!RunEventCallback(&fetch_event_callbacks_, event_queue_.get(), event_id,
+                         status)) {
+     // The event may have been aborted. Its response callback also needs to be
+@@ -1495,6 +1500,7 @@ void ServiceWorkerGlobalScope::AbortCallbackForFetchEvent(
+     response_callback_iter->value->TakeValue().reset();
+     fetch_response_callbacks_.erase(response_callback_iter);
+   }
++  RemoveItemFromRaceNetworkRequests(event_id);
+ 
+   // Run the event callback with the error code.
+   auto event_callback_iter = fetch_event_callbacks_.find(event_id);
+@@ -1551,52 +1557,11 @@ void ServiceWorkerGlobalScope::StartFetchEvent(
+ 
+   if (params->race_network_request_loader_factory &&
+       params->request->service_worker_race_network_request_token) {
+-    auto insert_result = race_network_request_loader_factories_.insert(
+-        String(params->request->service_worker_race_network_request_token
+-                   ->ToString()),
+-        std::move(params->race_network_request_loader_factory));
+-
+-    // DumpWithoutCrashing if the token is empty, or not inserted as a new entry
+-    // to |race_network_request_loader_factories_|.
+-    // TODO(crbug.com/1492640) Remove DumpWithoutCrashing once we collect data
+-    // and identify the cause.
+-    static bool has_dumped_without_crashing_for_empty_token = false;
+-    static bool has_dumped_without_crashing_for_not_new_entry = false;
+-    if (!has_dumped_without_crashing_for_empty_token &&
+-        params->request->service_worker_race_network_request_token
+-            ->is_empty()) {
+-      has_dumped_without_crashing_for_empty_token = true;
+-      SCOPED_CRASH_KEY_BOOL(
+-          "SWGlobalScope", "empty_race_token",
+-          params->request->service_worker_race_network_request_token
+-              ->is_empty());
+-      SCOPED_CRASH_KEY_STRING64(
+-          "SWGlobalScope", "race_token_string",
+-          params->request->service_worker_race_network_request_token
+-              ->ToString());
+-      SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
+-                            insert_result.is_new_entry);
+-      SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
+-                                 params->request->url.GetString().Utf8());
+-      base::debug::DumpWithoutCrashing();
+-    }
+-    if (!has_dumped_without_crashing_for_not_new_entry &&
+-        !insert_result.is_new_entry) {
+-      has_dumped_without_crashing_for_not_new_entry = true;
+-      SCOPED_CRASH_KEY_BOOL(
+-          "SWGlobalScope", "empty_race_token",
+-          params->request->service_worker_race_network_request_token
+-              ->is_empty());
+-      SCOPED_CRASH_KEY_STRING64(
+-          "SWGlobalScope", "race_token_string",
+-          params->request->service_worker_race_network_request_token
+-              ->ToString());
+-      SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
+-                            insert_result.is_new_entry);
+-      SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
+-                                 params->request->url.GetString().Utf8());
+-      base::debug::DumpWithoutCrashing();
+-    }
++    InsertNewItemToRaceNetworkRequests(
++        event_id,
++        params->request->service_worker_race_network_request_token.value(),
++        std::move(params->race_network_request_loader_factory),
++        params->request->url);
+   }
+ 
+   Request* request = Request::Create(
+@@ -2808,12 +2773,71 @@ bool ServiceWorkerGlobalScope::SetAttributeEventListener(
+ absl::optional<mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>
+ ServiceWorkerGlobalScope::FindRaceNetworkRequestURLLoaderFactory(
+     const base::UnguessableToken& token) {
+-  mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> result =
+-      race_network_request_loader_factories_.Take(String(token.ToString()));
++  std::unique_ptr<RaceNetworkRequestInfo> result =
++      race_network_requests_.Take(String(token.ToString()));
+   if (result) {
+-    return result;
++    race_network_request_fetch_event_ids_.erase(result->fetch_event_id);
++    return absl::optional<
++        mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>(
++        std::move(result->url_loader_factory));
+   }
+   return absl::nullopt;
+ }
+ 
++void ServiceWorkerGlobalScope::InsertNewItemToRaceNetworkRequests(
++    int fetch_event_id,
++    const base::UnguessableToken& token,
++    mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++        url_loader_factory,
++    const KURL& request_url) {
++  auto race_network_request_token = String(token.ToString());
++  auto info = std::make_unique<RaceNetworkRequestInfo>(
++      fetch_event_id, race_network_request_token,
++      std::move(url_loader_factory));
++  race_network_request_fetch_event_ids_.insert(fetch_event_id, info.get());
++  auto insert_result = race_network_requests_.insert(race_network_request_token,
++                                                     std::move(info));
++
++  // DumpWithoutCrashing if the token is empty, or not inserted as a new entry
++  // to |race_network_request_loader_factories_|.
++  // TODO(crbug.com/1492640) Remove DumpWithoutCrashing once we collect data
++  // and identify the cause.
++  static bool has_dumped_without_crashing_for_empty_token = false;
++  static bool has_dumped_without_crashing_for_not_new_entry = false;
++  if (!has_dumped_without_crashing_for_empty_token && token.is_empty()) {
++    has_dumped_without_crashing_for_empty_token = true;
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "empty_race_token",
++                          token.is_empty());
++    SCOPED_CRASH_KEY_STRING64("SWGlobalScope", "race_token_string",
++                              token.ToString());
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
++                          insert_result.is_new_entry);
++    SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
++                               request_url.GetString().Utf8());
++    base::debug::DumpWithoutCrashing();
++  }
++  if (!has_dumped_without_crashing_for_not_new_entry &&
++      !insert_result.is_new_entry) {
++    has_dumped_without_crashing_for_not_new_entry = true;
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "empty_race_token",
++                          token.is_empty());
++    SCOPED_CRASH_KEY_STRING64("SWGlobalScope", "race_token_string",
++                              token.ToString());
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
++                          insert_result.is_new_entry);
++    SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
++                               request_url.GetString().Utf8());
++    base::debug::DumpWithoutCrashing();
++  }
++}
++
++void ServiceWorkerGlobalScope::RemoveItemFromRaceNetworkRequests(
++    int fetch_event_id) {
++  RaceNetworkRequestInfo* info =
++      race_network_request_fetch_event_ids_.Take(fetch_event_id);
++  if (info) {
++    race_network_requests_.erase(info->token);
++  }
++}
++
+ }  // namespace blink
+diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+index 46c431b395825..ac4cac0b1d8fb 100644
+--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
++++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+@@ -623,6 +623,14 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final
+   // ServiceWorker.FetchEvent.QueuingTime histogram.
+   void RecordQueuingTime(base::TimeTicks created_time);
+ 
++  void InsertNewItemToRaceNetworkRequests(
++      int fetch_event_id,
++      const base::UnguessableToken& token,
++      mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++          url_loader_factory,
++      const KURL& request_url);
++  void RemoveItemFromRaceNetworkRequests(int fetch_event_id);
++
+   Member<ServiceWorkerClients> clients_;
+   Member<ServiceWorkerRegistration> registration_;
+   Member<::blink::ServiceWorker> service_worker_;
+@@ -768,10 +776,17 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final
+ 
+   blink::BlinkStorageKey storage_key_;
+ 
++  struct RaceNetworkRequestInfo {
++    int fetch_event_id;
++    String token;
++    mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++        url_loader_factory;
++  };
+   // TODO(crbug.com/918702) WTF::HashMap cannot use base::UnguessableToken as a
+   // key. As a workaround uses WTF::String as a key instead.
+-  HashMap<String, mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>
+-      race_network_request_loader_factories_;
++  HashMap<String, std::unique_ptr<RaceNetworkRequestInfo>>
++      race_network_requests_;
++  HashMap<int, RaceNetworkRequestInfo*> race_network_request_fetch_event_ids_;
+ 
+   HeapMojoAssociatedRemote<mojom::blink::AssociatedInterfaceProvider>
+       remote_associated_interfaces_{this};
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
new file mode 100644
index 0000000000000..8bbbbe9483632
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
@@ -0,0 +1 @@
+-RNp1
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch b/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
new file mode 100644
index 0000000000000..112da65b4d9b6
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
@@ -0,0 +1,16 @@
+diff -up chromium-120.0.6099.56/third_party/libc++/src/include/__config.me chromium-120.0.6099.56/third_party/libc++/src/include/__config
+--- chromium-120.0.6099.56/third_party/libc++/src/include/__config.me	2023-12-03 00:05:51.254483474 +0100
++++ chromium-120.0.6099.56/third_party/libc++/src/include/__config	2023-12-03 00:06:05.872863168 +0100
+@@ -32,11 +32,7 @@
+ 
+ // Warn if a compiler version is used that is not supported anymore
+ // LLVM RELEASE Update the minimum compiler versions
+-#  if defined(_LIBCPP_CLANG_VER)
+-#    if _LIBCPP_CLANG_VER < 1500
+-#      warning "Libc++ only supports Clang 15 and later"
+-#    endif
+-#  elif defined(_LIBCPP_APPLE_CLANG_VER)
++#  if defined(_LIBCPP_APPLE_CLANG_VER)
+ #    if _LIBCPP_APPLE_CLANG_VER < 1500
+ #      warning "Libc++ only supports AppleClang 15 and later"
+ #    endif
diff --git a/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch b/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
new file mode 100644
index 0000000000000..72c7b7ec41c28
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
@@ -0,0 +1,13 @@
+diff -up chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn.me chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn
+--- chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn.me	2023-11-26 16:14:15.364064126 +0100
++++ chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn	2023-11-26 16:41:16.877321990 +0100
+@@ -21,6 +21,9 @@ if (use_atk) {
+     minor = atspi_version[1]
+     micro = atspi_version[2]
+ 
++    # gn workaround for the error: Assignment had no effect
++    print("ATSPI Version: $major.$minor.$micro")
++
+     # ATSPI 2.49.90 now defines these for us and it's an error for us to
+     # redefine them on the compiler command line.
+     # See ATSPI 927344a34cd5bf81fc64da4968241735ecb4f03b
diff --git a/srcpkgs/chromium/patches/chromium-119-missing-header-files.patch b/srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
similarity index 97%
rename from srcpkgs/chromium/patches/chromium-119-missing-header-files.patch
rename to srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
index a2542ef420eaf..44f867475b218 100644
--- a/srcpkgs/chromium/patches/chromium-119-missing-header-files.patch
+++ b/srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
@@ -131,17 +131,6 @@ diff -up chromium-109.0.5414.74/third_party/swiftshader/src/System/LRUCache.hpp.
  #include <cstddef>
  #include <functional>
  #include <unordered_set>
-diff -up chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
---- chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me	2023-01-17 15:40:23.854386206 +0100
-+++ chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h	2023-01-17 16:58:19.397862885 +0100
-@@ -2388,6 +2388,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeV
- #ifdef VMA_IMPLEMENTATION
- #undef VMA_IMPLEMENTATION
- 
-+#include <cstdio>
- #include <cstdint>
- #include <cstdlib>
- #include <cstring>
 diff -up chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h
 --- chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me	2023-01-17 18:08:25.745491353 +0100
 +++ chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h	2023-01-17 18:08:35.777667632 +0100
diff --git a/srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch b/srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
similarity index 67%
rename from srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch
rename to srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
index a16c979c37f1c..b1d987adeff8d 100644
--- a/srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch
+++ b/srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
@@ -1,6 +1,25 @@
-diff -up chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constructor chromium-119.0.6045.59/base/trace_event/trace_log.cc
---- chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constructor	2023-10-26 18:16:51.000000000 +0200
-+++ chromium-119.0.6045.59/base/trace_event/trace_log.cc	2023-10-30 16:51:02.270151487 +0100
+diff -up chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc.no_matching_constructor chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc
+--- chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc.no_matching_constructor	2023-11-29 22:39:40.000000000 +0100
++++ chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc	2023-12-03 17:31:25.748420189 +0100
+@@ -218,13 +218,13 @@ PersistentSparseHistogramDataManager::Lo
+     // The sample-record could be for any sparse histogram. Add the reference
+     // to the appropriate collection for later use.
+     if (found_id == match_id) {
+-      found_records.emplace_back(ref, value);
++      found_records.emplace_back() = {ref, value};
+       found = true;
+     } else {
+       std::vector<ReferenceAndSample>* samples =
+           GetSampleMapRecordsWhileLocked(found_id);
+       CHECK(samples);
+-      samples->emplace_back(ref, value);
++      samples->emplace_back() = {ref, value};
+     }
+   }
+ 
+diff -up chromium-120.0.6099.56/base/trace_event/trace_log.cc.no_matching_constructor chromium-120.0.6099.56/base/trace_event/trace_log.cc
+--- chromium-120.0.6099.56/base/trace_event/trace_log.cc.no_matching_constructor	2023-11-29 22:39:40.000000000 +0100
++++ chromium-120.0.6099.56/base/trace_event/trace_log.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -2191,8 +2191,8 @@ void TraceLog::SetTraceBufferForTesting(
  #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
  void TraceLog::OnSetup(const perfetto::DataSourceBase::SetupArgs& args) {
@@ -12,9 +31,9 @@ diff -up chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constr
  }
  
  void TraceLog::OnStart(const perfetto::DataSourceBase::StartArgs&) {
-diff -up chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc
---- chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor	2023-10-26 18:16:57.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc	2023-10-30 16:51:02.269151462 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc
+--- chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor	2023-11-29 22:39:47.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -226,8 +226,8 @@ void OneTimePermissionProvider::OnSuspen
  
        while (rule_iterator && rule_iterator->HasNext()) {
@@ -37,9 +56,9 @@ diff -up chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permiss
        permissions::PermissionUmaUtil::RecordOneTimePermissionEvent(
            content_setting_type, trigger_event);
      }
-diff -up chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc
---- chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor	2023-10-26 18:16:57.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc	2023-10-30 16:51:02.267151412 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc
+--- chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor	2023-11-29 22:39:48.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -67,8 +67,8 @@ base::flat_map<std::string, SAMLProfileA
    // TODO(crbug.com/1445072): Add actual domains with attribute names.
    profile_attributes->insert(std::make_pair(
@@ -51,9 +70,9 @@ diff -up chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/pro
  
    // Extract domains and attributes from the command line switch.
    const base::CommandLine& command_line =
-diff -up chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
---- chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor	2023-10-26 18:17:00.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc	2023-10-30 16:51:02.262151288 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor	2023-11-29 22:39:52.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -474,10 +474,10 @@ void ChromeOmniboxClient::OnAutocomplete
                alternative_nav_match);
  
@@ -67,9 +86,117 @@ diff -up chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.
  
    if (browser_) {
      auto navigation = chrome::OpenCurrentURL(browser_);
-diff -up chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matching_constructor chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc
---- chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matching_constructor	2023-10-26 18:17:01.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc	2023-10-30 16:51:02.268151437 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc.no_matching_constructor	2023-11-29 22:39:52.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -148,8 +148,8 @@ SafetyHubMenuNotificationService::GetNot
+   // The information related to showing the notification needs to be persisted
+   // as well.
+   SaveNotificationsToPrefs();
+-  return MenuNotificationEntry(notification_to_show->GetNotificationCommandId(),
+-                               notification_to_show->GetNotificationString());
++  return MenuNotificationEntry{notification_to_show->GetNotificationCommandId(),
++                               notification_to_show->GetNotificationString()};
+ }
+ 
+ absl::optional<ResultMap>
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc	2023-12-03 17:31:25.749420208 +0100
+@@ -55,12 +55,12 @@ std::vector<EmbeddedPermissionPromptAskV
+ EmbeddedPermissionPromptAskView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
++        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+   }
+-  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
+-                       ButtonType::kAllow, ui::ButtonStyle::kTonal);
++  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
++                       ButtonType::kAllow, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h	2023-12-03 17:31:25.750420227 +0100
+@@ -86,6 +86,7 @@ class EmbeddedPermissionPromptBaseView :
+   struct RequestLineConfiguration {
+     const raw_ptr<const gfx::VectorIcon> icon;
+     std::u16string message;
++    RequestLineConfiguration(auto i, auto m) : icon(i), message(m) { }
+   };
+ 
+   struct ButtonConfiguration {
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -48,8 +48,8 @@ EmbeddedPermissionPromptPolicyView::GetR
+ std::vector<EmbeddedPermissionPromptPolicyView::ButtonConfiguration>
+ EmbeddedPermissionPromptPolicyView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
+-                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal);
++  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
++                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -63,18 +63,18 @@ EmbeddedPermissionPromptPreviouslyDenied
+ std::vector<EmbeddedPermissionPromptPreviouslyDeniedView::ButtonConfiguration>
+ EmbeddedPermissionPromptPreviouslyDeniedView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_NOT_ALLOWING),
+-      ButtonType::kContinueNotAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kContinueNotAllowing, ui::ButtonStyle::kTonal};
+ 
+   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
++        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+   } else {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllow, ui::ButtonStyle::kTonal);
++        ButtonType::kAllow, ui::ButtonStyle::kTonal};
+   }
+   return buttons;
+ }
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -57,13 +57,13 @@ EmbeddedPermissionPromptPreviouslyGrante
+ std::vector<EmbeddedPermissionPromptPreviouslyGrantedView::ButtonConfiguration>
+ EmbeddedPermissionPromptPreviouslyGrantedView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_ALLOWING),
+-      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal};
+ 
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_STOP_ALLOWING),
+-      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc.no_matching_constructor chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc
+--- chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc.no_matching_constructor	2023-11-29 22:39:54.000000000 +0100
++++ chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc	2023-12-03 17:31:25.750420227 +0100
 @@ -346,7 +346,7 @@ Status ParseMobileEmulation(const base::
                          "'version' field of type string");
          }
@@ -88,10 +215,10 @@ diff -up chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matc
        }
  
        client_hints.full_version_list = std::move(full_version_list);
-diff -up chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc
---- chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor	2023-10-30 16:51:02.273151562 +0100
-+++ chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc	2023-10-30 17:41:12.685887538 +0100
-@@ -195,9 +195,9 @@ class ContactInfoProfileSetter {
+diff -up chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc
+--- chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor	2023-11-29 22:39:57.000000000 +0100
++++ chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -197,9 +197,9 @@ class ContactInfoProfileSetter {
        CHECK(observations.empty());
        for (const sync_pb::ContactInfoSpecifics::Observation& proto_observation :
             metadata.observations()) {
@@ -103,10 +230,38 @@ diff -up chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sy
        }
      }
    }
-diff -up chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
---- chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc	2023-10-30 16:51:02.260151238 +0100
-@@ -1530,7 +1530,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOut
+diff -up chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc.no_matching_constructor chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc
+--- chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc.no_matching_constructor	2023-11-29 22:39:57.000000000 +0100
++++ chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -1763,10 +1763,10 @@ std::unique_ptr<AutofillProfile> Autofil
+     }
+ 
+     base::span<const uint8_t> observations_data = s.ColumnBlob(3);
+-    field_type_values.emplace_back(
++    field_type_values.emplace_back() = {
+         type, s.ColumnString16(1), s.ColumnInt(2),
+         std::vector<uint8_t>(observations_data.begin(),
+-                             observations_data.end()));
++                             observations_data.end())};
+ 
+     if (type == ADDRESS_HOME_COUNTRY) {
+       country_code = base::UTF16ToUTF8(s.ColumnString16(1));
+diff -up chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc.no_matching_constructor chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc
+--- chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc.no_matching_constructor	2023-11-29 22:39:58.000000000 +0100
++++ chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -630,7 +630,7 @@ void PasswordManager::OnUserModifiedNonP
+   // |driver| might be empty on iOS or in tests.
+   int driver_id = driver ? driver->GetId() : 0;
+   possible_usernames_.Put(
+-      PossibleUsernameFieldIdentifier(driver_id, renderer_id),
++      PossibleUsernameFieldIdentifier{driver_id, renderer_id},
+       PossibleUsernameData(GetSignonRealm(driver->GetLastCommittedURL()),
+                            renderer_id, value, base::Time::Now(), driver_id,
+                            autocomplete_attribute_has_username, is_likely_otp));
+diff -up chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
+--- chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -1567,7 +1567,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOut
  
        // Issue readbacks from the surfaces:
        for (size_t i = 0; i < CopyOutputResult::kNV12MaxPlanes; ++i) {
@@ -115,10 +270,10 @@ diff -up chromium-119.0.6045.59/components/viz/service/display_embedder/skia_out
          SkImageInfo dst_info = SkImageInfo::Make(
              size, (i == 0) ? kAlpha_8_SkColorType : kR8G8_unorm_SkColorType,
              kUnpremul_SkAlphaType);
-diff -up chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matching_constructor chromium-119.0.6045.59/content/browser/download/save_package.cc
---- chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/content/browser/download/save_package.cc	2023-10-30 16:51:02.271151512 +0100
-@@ -769,8 +769,8 @@ void SavePackage::Finish() {
+diff -up chromium-120.0.6099.56/content/browser/download/save_package.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/download/save_package.cc
+--- chromium-120.0.6099.56/content/browser/download/save_package.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/download/save_package.cc	2023-12-03 17:31:25.752420265 +0100
+@@ -767,8 +767,8 @@ void SavePackage::Finish() {
    if (download_) {
      std::vector<download::DownloadSaveItemData::ItemInfo> files;
      for (auto& item : saved_success_items_) {
@@ -129,52 +284,76 @@ diff -up chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matc
      }
      download::DownloadSaveItemData::AttachItemData(download_, std::move(files));
    }
-diff -up chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc
---- chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc	2023-10-30 17:38:09.351389984 +0100
-@@ -8567,7 +8567,7 @@ void RenderFrameHostImpl::SendFencedFram
+diff -up chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc
+--- chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc	2023-12-03 17:31:25.752420265 +0100
+@@ -3002,10 +3002,10 @@ DoGetKAnonymityData(sql::Database& db,
+ 
+   std::vector<StorageInterestGroup::KAnonymityData> k_anon_data;
+   while (interest_group_kanon_query.Step()) {
+-    k_anon_data.emplace_back(
++    k_anon_data.emplace_back() = {
+         /*key=*/interest_group_kanon_query.ColumnString(0),
+         /*is_k_anonymous=*/interest_group_kanon_query.ColumnBool(1),
+-        /*last_updated=*/interest_group_kanon_query.ColumnTime(2));
++        /*last_updated=*/interest_group_kanon_query.ColumnTime(2)};
+   }
+   if (!interest_group_kanon_query.Succeeded()) {
+     return absl::nullopt;
+diff -up chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc
+--- chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc	2023-12-03 20:49:28.059042672 +0100
+@@ -8685,7 +8685,7 @@ void RenderFrameHostImpl::SendFencedFram
    for (const blink::FencedFrame::ReportingDestination& destination :
         destinations) {
      SendFencedFrameReportingBeaconInternal(
 -        DestinationEnumEvent(event_type, event_data), destination,
 +        DestinationEnumEvent{event_type, event_data}, destination,
-         /*from_renderer=*/true, attribution_reporting_runtime_features,
-         GetFrameTreeNodeId());
+         /*from_renderer=*/true, attribution_reporting_runtime_features);
    }
-@@ -8603,7 +8603,7 @@ void RenderFrameHostImpl::SendFencedFram
+ }
+@@ -8720,7 +8720,7 @@ void RenderFrameHostImpl::SendFencedFram
    }
  
    SendFencedFrameReportingBeaconInternal(
 -      DestinationURLEvent(destination_url),
 +      DestinationURLEvent{destination_url},
        blink::FencedFrame::ReportingDestination::kBuyer,
-       /*from_renderer=*/true, attribution_reporting_runtime_features,
-       GetFrameTreeNodeId());
-@@ -8703,8 +8703,8 @@ void RenderFrameHostImpl::MaybeSendFence
+       /*from_renderer=*/true, attribution_reporting_runtime_features);
+ }
+@@ -8820,7 +8820,7 @@ void RenderFrameHostImpl::MaybeSendFence
          data = info->data;
        }
        initiator_rfh->SendFencedFrameReportingBeaconInternal(
--          DestinationEnumEvent(blink::kFencedFrameTopNavigationBeaconType,
--                               data),
-+          DestinationEnumEvent{blink::kFencedFrameTopNavigationBeaconType,
-+                               data},
-           destination,
+-          AutomaticBeaconEvent(event_type, data), destination,
++          AutomaticBeaconEvent{event_type, data}, destination,
            /*from_renderer=*/false, attribution_reporting_features,
-           GetFrameTreeNodeId(), navigation_request.GetNavigationId());
-@@ -8717,8 +8717,8 @@ void RenderFrameHostImpl::MaybeSendFence
+           navigation_request.GetNavigationId());
+     }
+@@ -8832,7 +8832,7 @@ void RenderFrameHostImpl::MaybeSendFence
      for (blink::FencedFrame::ReportingDestination destination :
           info->destinations) {
        initiator_rfh->SendFencedFrameReportingBeaconInternal(
--          DestinationEnumEvent(blink::kFencedFrameTopNavigationBeaconType,
--                               info->data),
-+          DestinationEnumEvent{blink::kFencedFrameTopNavigationBeaconType,
-+                               info->data},
-           destination,
+-          AutomaticBeaconEvent(event_type, info->data), destination,
++          AutomaticBeaconEvent{event_type, info->data}, destination,
            /*from_renderer=*/false, info->attribution_reporting_runtime_features,
-           GetFrameTreeNodeId(), navigation_request.GetNavigationId());
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h
---- chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor	2023-10-26 18:17:24.000000000 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h	2023-10-30 16:51:02.262151288 +0100
+           navigation_request.GetNavigationId());
+     }
+diff -up chromium-120.0.6099.56/net/dns/host_resolver_cache.cc.no_matching_constructor chromium-120.0.6099.56/net/dns/host_resolver_cache.cc
+--- chromium-120.0.6099.56/net/dns/host_resolver_cache.cc.no_matching_constructor	2023-11-29 22:40:07.000000000 +0100
++++ chromium-120.0.6099.56/net/dns/host_resolver_cache.cc	2023-12-03 17:31:25.754420303 +0100
+@@ -368,7 +368,7 @@ void HostResolverCache::Set(
+ 
+   std::string domain_name = result->domain_name();
+   entries_.emplace(
+-      Key(std::move(domain_name), network_anonymization_key),
++      Key{std::move(domain_name), network_anonymization_key},
+       Entry(std::move(result), source, secure, staleness_generation));
+ 
+   if (entries_.size() > max_entries_) {
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h
+--- chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor	2023-11-29 22:40:12.000000000 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h	2023-12-03 17:31:25.754420303 +0100
 @@ -96,7 +96,7 @@ class PLATFORM_EXPORT FontPalette : publ
        Color::ColorSpace color_interpolation_space,
        absl::optional<Color::HueInterpolationMethod> hue_interpolation_method) {
@@ -193,9 +372,9 @@ diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_p
    }
  
    double GetAlphaMultiplier() const {
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
---- chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor	2023-10-26 18:17:24.000000000 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc	2023-10-30 16:51:02.261151263 +0100
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
+--- chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor	2023-11-29 22:40:12.000000000 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc	2023-12-03 17:31:25.755420323 +0100
 @@ -31,7 +31,7 @@ Vector<FontPalette::FontPaletteOverride>
          color_interpolation_space, hue_interpolation_method, start_color,
          end_color, percentage, alpha_multiplier);
@@ -205,113 +384,22 @@ diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palett
      result_color_records.push_back(result_color_record);
    }
    return result_color_records;
-diff -up chromium-119.0.6045.59/ui/gtk/gtk_ui.cc.no_matching_constructor chromium-119.0.6045.59/ui/gtk/gtk_ui.cc
---- chromium-119.0.6045.59/ui/gtk/gtk_ui.cc.no_matching_constructor	2023-10-26 18:18:14.000000000 +0200
-+++ chromium-119.0.6045.59/ui/gtk/gtk_ui.cc	2023-10-30 16:51:02.272151537 +0100
-@@ -993,11 +993,11 @@ ui::DisplayConfig GtkUi::GetDisplayConfi
-     GdkRectangle geometry;
-     gdk_monitor_get_geometry(monitor, &geometry);
-     int monitor_scale = std::max(1, gdk_monitor_get_scale_factor(monitor));
--    config.display_geometries.emplace_back(
-+    config.display_geometries.emplace_back() = {
-         gfx::Rect(monitor_scale * geometry.x, monitor_scale * geometry.y,
-                   monitor_scale * geometry.width,
-                   monitor_scale * geometry.height),
--        monitor_scale * font_scale);
-+        static_cast<float>(monitor_scale * font_scale)};
-   }
-   return config;
- }
-diff -up chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc.me chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc
---- chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc.me	2023-10-31 18:14:49.275728099 +0100
-+++ chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc	2023-10-31 18:19:54.599223239 +0100
-@@ -221,13 +221,13 @@ PersistentSparseHistogramDataManager::Lo
-     // The sample-record could be for any sparse histogram. Add the reference
-     // to the appropriate collection for later use.
-     if (found_id == match_id) {
--      found_records.emplace_back(ref, value);
-+      found_records.emplace_back() = {ref, value};
-       found = true;
+diff -up chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp.no_matching_constructor chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp
+--- chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp.no_matching_constructor	2023-11-29 22:41:46.000000000 +0100
++++ chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp	2023-12-03 17:31:25.756420342 +0100
+@@ -491,7 +491,7 @@ void CPDF_RenderStatus::ProcessClipPath(
      } else {
-       std::vector<ReferenceAndSample>* samples =
-           GetSampleMapRecordsWhileLocked(found_id);
-       CHECK(samples);
--      samples->emplace_back(ref, value);
-+      samples->emplace_back() = {ref, value};
+       m_pDevice->SetClip_PathFill(
+           *pPath, &mtObj2Device,
+-          CFX_FillRenderOptions(ClipPath.GetClipType(i)));
++          CFX_FillRenderOptions{ClipPath.GetClipType(i)});
      }
    }
  
-diff -up chromium-119.0.6045.59/net/dns/host_resolver_cache.cc.me chromium-119.0.6045.59/net/dns/host_resolver_cache.cc
---- chromium-119.0.6045.59/net/dns/host_resolver_cache.cc.me	2023-10-31 20:48:19.153868338 +0100
-+++ chromium-119.0.6045.59/net/dns/host_resolver_cache.cc	2023-10-31 20:51:37.634526549 +0100
-@@ -368,7 +368,7 @@ void HostResolverCache::Set(
- 
-   std::string domain_name = result->domain_name();
-   entries_.emplace(
--      Key(std::move(domain_name), network_anonymization_key),
-+      Key{std::move(domain_name), network_anonymization_key},
-       Entry(std::move(result), source, secure, staleness_generation));
- 
-   if (entries_.size() > max_entries_) {
-diff -up chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc.me chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc
---- chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc.me	2023-10-31 22:32:58.995997897 +0100
-+++ chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc	2023-10-31 22:33:28.290520601 +0100
-@@ -1733,10 +1733,10 @@ std::unique_ptr<AutofillProfile> Autofil
-     }
- 
-     base::span<const uint8_t> observations_data = s.ColumnBlob(3);
--    field_type_values.emplace_back(
-+    field_type_values.emplace_back() = {
-         type, s.ColumnString16(1), s.ColumnInt(2),
-         std::vector<uint8_t>(observations_data.begin(),
--                             observations_data.end()));
-+                             observations_data.end())};
- 
-     if (type == ADDRESS_HOME_COUNTRY) {
-       country_code = base::UTF16ToUTF8(s.ColumnString16(1));
-diff -up chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc.than chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc
---- chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc.than	2023-10-31 22:41:22.850233005 +0100
-+++ chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc	2023-10-31 22:42:37.276931933 +0100
-@@ -625,7 +625,7 @@ void PasswordManager::OnUserModifiedNonP
-   // |driver| might be empty on iOS or in tests.
-   int driver_id = driver ? driver->GetId() : 0;
-   possible_usernames_.Put(
--      PossibleUsernameFieldIdentifier(driver_id, renderer_id),
-+      PossibleUsernameFieldIdentifier{driver_id, renderer_id},
-       PossibleUsernameData(GetSignonRealm(driver->GetLastCommittedURL()),
-                            renderer_id, value, base::Time::Now(), driver_id,
-                            autocomplete_attribute_has_username, is_likely_otp));
-diff -up chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc.than chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc
---- chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc.than	2023-10-31 23:31:08.438267908 +0100
-+++ chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc	2023-10-31 23:32:08.979358711 +0100
-@@ -2854,10 +2854,10 @@ DoGetKAnonymityData(sql::Database& db,
- 
-   std::vector<StorageInterestGroup::KAnonymityData> k_anon_data;
-   while (interest_group_kanon_query.Step()) {
--    k_anon_data.emplace_back(
-+    k_anon_data.emplace_back() = {
-         /*key=*/interest_group_kanon_query.ColumnString(0),
-         /*is_k_anonymous=*/interest_group_kanon_query.ColumnBool(1),
--        /*last_updated=*/interest_group_kanon_query.ColumnTime(2));
-+        /*last_updated=*/interest_group_kanon_query.ColumnTime(2)};
-   }
-   if (!interest_group_kanon_query.Succeeded()) {
-     return absl::nullopt;
-diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc.than chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc
---- chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc.than	2023-11-01 11:19:42.745395797 +0100
-+++ chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc	2023-11-01 11:22:16.670920679 +0100
-@@ -1881,7 +1881,7 @@ void FederatedAuthRequestImpl::ShowError
-       base::BindOnce(&FederatedAuthRequestImpl::CompleteRequestWithError,
-                      weak_ptr_factory_.GetWeakPtr()));
-   absl::optional<TokenError> token_error =
--      error ? absl::make_optional<TokenError>(error->code, error->url)
-+      error ? absl::make_optional<TokenError>({error->code, error->url})
-             : absl::nullopt;
- 
-   // TODO(crbug.com/1485710): Refactor IdentityCredentialTokenError
---- chromium-119.0.6045.59/ui/base/wayland/color_manager_util.h.no_matching_constructor	2023-10-26 18:18:14.000000000 +0200
-+++ chromium-119.0.6045.59/ui/base/wayland/color_manager_util.h	2023-11-01 17:29:54.269820415 +0100
-@@ -52,53 +52,53 @@
+diff -up chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h.no_matching_constructor chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h
+--- chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h.no_matching_constructor	2023-11-29 22:40:44.000000000 +0100
++++ chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h	2023-12-03 17:31:25.755420323 +0100
+@@ -52,53 +52,53 @@ constexpr auto kChromaticityMap = base::
      zcr_color_manager_v1_chromaticity_names,
      PrimaryVersion>(
      {{ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT601_525_LINE,
@@ -391,7 +479,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  
  // A map from the zcr_color_manager_v1 eotf_names enum values
  // representing well-known EOTFs, to their equivalent TransferIDs.
-@@ -107,68 +107,68 @@
+@@ -107,68 +107,68 @@ constexpr auto kEotfMap = base::MakeFixe
      zcr_color_manager_v1_eotf_names,
      TransferVersion>({
      {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -498,7 +586,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  });
  
  // A map from the SDR zcr_color_manager_v1 eotf_names enum values
-@@ -177,18 +177,18 @@
+@@ -177,18 +177,18 @@ constexpr auto kEotfMap = base::MakeFixe
  constexpr auto kTransferMap =
      base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>({
          {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -524,7 +612,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
      });
  
  // A map from the HDR zcr_color_manager_v1 eotf_names enum values
-@@ -197,70 +197,70 @@
+@@ -197,70 +197,70 @@ constexpr auto kTransferMap =
  constexpr auto kHDRTransferMap =
      base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>(
          {{ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -628,76 +716,27 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  
  zcr_color_manager_v1_chromaticity_names ToColorManagerChromaticity(
      gfx::ColorSpace::PrimaryID primaryID,
-@@ -283,4 +283,4 @@
+@@ -283,4 +283,4 @@ zcr_color_manager_v1_eotf_names ToColorM
  
  }  // namespace ui::wayland
  
 -#endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
 \ Kein Zeilenumbruch am Dateiende.
 +#endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.me chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.me	2023-11-01 20:46:15.997861278 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc	2023-11-01 20:49:33.603371680 +0100
-@@ -58,13 +58,13 @@ EmbeddedPermissionPromptPreviouslyGrante
- std::vector<EmbeddedPermissionPromptPreviouslyGrantedView::ButtonConfiguration>
- EmbeddedPermissionPromptPreviouslyGrantedView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
--  buttons.emplace_back(
-+  buttons.emplace_back() = {
-       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_ALLOWING),
--      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal);
-+      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal};
- 
--  buttons.emplace_back(
-+  buttons.emplace_back() = {
-       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_STOP_ALLOWING),
--      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal);
-+      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal};
-   return buttons;
- }
- 
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.than chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.than	2023-11-01 20:52:29.005464494 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc	2023-11-01 21:14:12.741859604 +0100
-@@ -56,12 +56,12 @@ std::vector<EmbeddedPermissionPromptAskV
- EmbeddedPermissionPromptAskView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
-   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
--    buttons.emplace_back(
-+    buttons.emplace_back() = {
-         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
--        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
-+        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+diff -up chromium-120.0.6099.56/ui/gtk/gtk_ui.cc.no_matching_constructor chromium-120.0.6099.56/ui/gtk/gtk_ui.cc
+--- chromium-120.0.6099.56/ui/gtk/gtk_ui.cc.no_matching_constructor	2023-11-29 22:40:44.000000000 +0100
++++ chromium-120.0.6099.56/ui/gtk/gtk_ui.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -1013,11 +1013,11 @@ ui::DisplayConfig GtkUi::GetDisplayConfi
+     GdkRectangle geometry;
+     gdk_monitor_get_geometry(monitor, &geometry);
+     int monitor_scale = std::max(1, gdk_monitor_get_scale_factor(monitor));
+-    config.display_geometries.emplace_back(
++    config.display_geometries.emplace_back() = {
+         gfx::Rect(monitor_scale * geometry.x, monitor_scale * geometry.y,
+                   monitor_scale * geometry.width,
+                   monitor_scale * geometry.height),
+-        monitor_scale * font_scale);
++        static_cast<float>(monitor_scale * font_scale)};
    }
--  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
--                       ButtonType::kAllow, ui::ButtonStyle::kTonal);
-+  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
-+                       ButtonType::kAllow, ui::ButtonStyle::kTonal};
-   return buttons;
- }
- 
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.me chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.me	2023-11-01 21:22:02.222646903 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h	2023-11-01 21:19:58.769619393 +0100
-@@ -72,6 +72,7 @@ class EmbeddedPermissionPromptBaseView :
-   struct RequestLineConfiguration {
-     const raw_ptr<const gfx::VectorIcon> icon;
-     std::u16string message;
-+    RequestLineConfiguration(auto i, auto m) : icon(i), message(m) { }
-   };
- 
-   struct ButtonConfiguration {
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.than chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.than	2023-11-01 21:25:31.118626473 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc	2023-11-01 21:30:06.383340274 +0100
-@@ -48,8 +48,8 @@ EmbeddedPermissionPromptPolicyView::GetR
- std::vector<EmbeddedPermissionPromptPolicyView::ButtonConfiguration>
- EmbeddedPermissionPromptPolicyView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
--  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
--                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal);
-+  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
-+                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal};
-   return buttons;
+   return config;
  }
- 
diff --git a/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch b/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
new file mode 100644
index 0000000000000..e80ed715aaf29
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
@@ -0,0 +1,28 @@
+diff -up chromium-120.0.6099.35/build/config/compiler/BUILD.gn.than chromium-120.0.6099.35/build/config/compiler/BUILD.gn
+--- chromium-120.0.6099.35/build/config/compiler/BUILD.gn.than	2023-11-26 17:02:25.647022746 +0100
++++ chromium-120.0.6099.35/build/config/compiler/BUILD.gn	2023-11-26 17:15:58.025585358 +0100
+@@ -616,24 +616,6 @@ config("compiler") {
+       }
+     }
+ 
+-    # TODO(crbug.com/1488374): This causes binary size growth and potentially
+-    # other problems.
+-    # TODO(crbug.com/1491036): This isn't supported by Cronet's mainline llvm version.
+-    if (default_toolchain != "//build/toolchain/cros:target" &&
+-        !llvm_android_mainline) {
+-      cflags += [
+-        "-mllvm",
+-        "-split-threshold-for-reg-with-hint=0",
+-      ]
+-      if (use_thin_lto && is_a_target_toolchain) {
+-        if (is_win) {
+-          ldflags += [ "-mllvm:-split-threshold-for-reg-with-hint=0" ]
+-        } else {
+-          ldflags += [ "-Wl,-mllvm,-split-threshold-for-reg-with-hint=0" ]
+-        }
+-      }
+-    }
+-
+     # TODO(crbug.com/1235145): Investigate why/if this should be needed.
+     if (is_win) {
+       cflags += [ "/clang:-ffp-contract=off" ]
diff --git a/srcpkgs/chromium/patches/chromium-117-typename.patch b/srcpkgs/chromium/patches/chromium-120-typename.patch
similarity index 83%
rename from srcpkgs/chromium/patches/chromium-117-typename.patch
rename to srcpkgs/chromium/patches/chromium-120-typename.patch
index d3b00e7323603..9a2d878b12b54 100644
--- a/srcpkgs/chromium/patches/chromium-117-typename.patch
+++ b/srcpkgs/chromium/patches/chromium-120-typename.patch
@@ -1,3 +1,23 @@
+--- chromium-120.0.6099.56/base/containers/map_util.h.me	2023-12-02 19:00:19.696801563 +0100
++++ chromium-120.0.6099.56/base/containers/map_util.h	2023-12-02 19:00:47.049337547 +0100
+@@ -42,7 +42,7 @@
+ template <typename Map,
+           typename Key,
+           typename MappedElementType =
+-              std::pointer_traits<internal::MappedType<Map>>::element_type>
++              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
+ constexpr const MappedElementType* FindPtrOrNull(const Map& map,
+                                                  const Key& key) {
+   auto it = map.find(key);
+@@ -58,7 +58,7 @@
+ template <typename Map,
+           typename Key,
+           typename MappedElementType =
+-              std::pointer_traits<internal::MappedType<Map>>::element_type>
++              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
+ constexpr MappedElementType* FindPtrOrNull(Map& map, const Key& key) {
+   auto it = map.find(key);
+   return it != map.end() ? std::to_address(it->second) : nullptr;
 diff -up chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc.me chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc
 --- chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc.me	2023-06-17 14:50:56.342591702 +0200
 +++ chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc	2023-06-17 14:57:48.024377375 +0200
@@ -162,3 +182,24 @@ diff -up chromium-117.0.5938.62/components/supervised_user/core/browser/proto_fe
  
    // Remove fetcher under key from requests_in_flight_.
    void Remove(KeyType key);
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h.me chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h
+--- chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h.me	2023-12-04 00:29:35.197209538 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h	2023-12-04 00:30:24.436233249 +0100
+@@ -220,7 +220,7 @@ class PairAsyncIterable {
+  private:
+   virtual IterationSource* CreateIterationSource(
+       ScriptState* script_state,
+-      IterationSource::Kind kind,
++      typename IterationSource::Kind kind,
+       ExceptionState& exception_state) = 0;
+ };
+ 
+@@ -262,7 +262,7 @@ class ValueAsyncIterable {
+  private:
+   virtual IterationSource* CreateIterationSource(
+       ScriptState* script_state,
+-      IterationSource::Kind kind,
++      typename IterationSource::Kind kind,
+       ExceptionState& exception_state) = 0;
+ };
+ 
diff --git a/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch b/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
new file mode 100644
index 0000000000000..b06e29f29047a
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
@@ -0,0 +1,51 @@
+diff -up chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc
+--- chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:37.000000000 +0200
++++ chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc	2023-06-17 16:53:20.216628557 +0200
+@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui
+ void CdmPromiseAdapter::Clear(ClearReason reason) {
+   // Reject all outstanding promises.
+   DCHECK(thread_checker_.CalledOnValidThread());
+-  for (auto& [promise_id, promise] : promises_) {
++  for (auto& [p_i, p_e] : promises_) {
++    auto& promise_id = p_i;
++    auto& promise = p_e;
+     TRACE_EVENT_NESTABLE_ASYNC_END1(
+         "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id),
+         "status", "cleared");
+diff -up chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc
+--- chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me	2023-06-19 08:04:02.287072722 +0200
++++ chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc	2023-06-19 08:18:24.576814950 +0200
+@@ -1393,7 +1393,8 @@ void ServiceWorkerContextWrapper::MaybeP
+     return;
+   }
+ 
+-  auto [document_url, key, callback] = std::move(*request);
++  auto [d_u, key, callback] = std::move(*request);
++  auto document_url = d_u;
+ 
+   DCHECK(document_url.is_valid());
+   TRACE_EVENT1("ServiceWorker",
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc.me chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
+--- chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc.me	2023-12-03 22:17:50.922083200 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc	2023-12-03 22:22:55.437484343 +0100
+@@ -3447,7 +3447,8 @@ void GridLayoutAlgorithm::PlaceGridItems
+   DCHECK(out_row_break_between);
+ 
+   const auto& container_space = ConstraintSpace();
+-  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
++  const auto& [grid_items, l_d, tree_size] = sizing_tree.TreeRootData();
++  const auto& layout_data = l_d;
+ 
+   const auto* cached_layout_subtree = container_space.GetGridLayoutSubtree();
+   const auto container_writing_direction =
+@@ -3611,7 +3612,9 @@ void GridLayoutAlgorithm::PlaceGridItems
+ 
+   // TODO(ikilpatrick): Update |SetHasSeenAllChildren| and early exit if true.
+   const auto& constraint_space = ConstraintSpace();
+-  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
++  const auto& [g_i, l_d, tree_size] = sizing_tree.TreeRootData();
++  const auto& grid_items = g_i;
++  const auto& layout_data = l_d;
+ 
+   const auto* cached_layout_subtree = constraint_space.GetGridLayoutSubtree();
+   const auto container_writing_direction =
diff --git a/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch b/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
index afcdae179850a..b3dd2c33f0f21 100644
--- a/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
+++ b/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
@@ -1,5 +1,5 @@
---- a/base/allocator/partition_allocator/tagging.cc
-+++ b/base/allocator/partition_allocator/tagging.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/tagging.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/tagging.cc
 @@ -28,13 +28,25 @@
  #endif
  #endif
diff --git a/srcpkgs/chromium/patches/musl-no-execinfo.patch b/srcpkgs/chromium/patches/musl-no-execinfo.patch
index fac2b6d190e78..7407f1b9db38a 100644
--- a/srcpkgs/chromium/patches/musl-no-execinfo.patch
+++ b/srcpkgs/chromium/patches/musl-no-execinfo.patch
@@ -83,12 +83,3 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1
  // StackTrace::OutputToStream() is not implemented under uclibc, nor AIX.
  // See https://crbug.com/706728
  
-@@ -156,7 +156,7 @@
- 
- #endif  // !defined(__UCLIBC__) && !defined(_AIX)
- 
--#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID)
-+#if (BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !BUILDFLAG(IS_ANDROID)
- #if !BUILDFLAG(IS_IOS)
- static char* newArray() {
-   // Clang warns about the mismatched new[]/delete if they occur in the same
diff --git a/srcpkgs/chromium/patches/musl-no-mallinfo.patch b/srcpkgs/chromium/patches/musl-no-mallinfo.patch
index cd728ecfb112d..a58ee08a435a0 100644
--- a/srcpkgs/chromium/patches/musl-no-mallinfo.patch
+++ b/srcpkgs/chromium/patches/musl-no-mallinfo.patch
@@ -101,8 +101,8 @@ musl does not implement mallinfo()/mallinfo2()
  
  /* Define to 1 if you have the <malloc.h> header file. */
  #define HAVE_MALLOC_H 1
---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
-+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
 @@ -717,7 +717,7 @@
  
  #endif  // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID)
@@ -112,8 +112,8 @@ musl does not implement mallinfo()/mallinfo2()
  SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW {
    base::SimplePartitionStatsDumper allocator_dumper;
    Allocator()->DumpStats("malloc", true, &allocator_dumper);
---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
-+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
 @@ -24,7 +24,7 @@
  #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
  
diff --git a/srcpkgs/chromium/patches/musl-partition-atfork.patch b/srcpkgs/chromium/patches/musl-partition-atfork.patch
index 2910aa2bbf9b1..35d810055fbb5 100644
--- a/srcpkgs/chromium/patches/musl-partition-atfork.patch
+++ b/srcpkgs/chromium/patches/musl-partition-atfork.patch
@@ -1,5 +1,5 @@
---- a/base/allocator/partition_allocator/partition_root.cc
-+++ b/base/allocator/partition_allocator/partition_root.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc
 @@ -239,7 +239,7 @@
    if (!g_global_init_called.compare_exchange_strong(expected, true))
      return;
diff --git a/srcpkgs/chromium/patches/no-mte.patch b/srcpkgs/chromium/patches/no-mte.patch
deleted file mode 100644
index 56167e1e5c576..0000000000000
--- a/srcpkgs/chromium/patches/no-mte.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/base/allocator/partition_allocator/partition_alloc_config.h
-+++ b/base/allocator/partition_allocator/partition_alloc_config.h
-@@ -153,7 +153,7 @@
-    defined(ARCH_CPU_LITTLE_ENDIAN))
- 
- #define PA_CONFIG_HAS_MEMORY_TAGGING()              \
--  (defined(ARCH_CPU_ARM64) && defined(__clang__) && \
-+  (0 && defined(ARCH_CPU_ARM64) && defined(__clang__) && \
-    !defined(ADDRESS_SANITIZER) &&                   \
-    (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
- 
diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index b023946f3ec7b..d85bb894e3450 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -1,8 +1,8 @@
 # Template file for 'chromium'
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
-version=119.0.6045.105
-revision=3
+version=120.0.6099.109
+revision=1
 archs="i686* x86_64* aarch64* armv7l*"
 hostmakedepends="
  $(vopt_if clang "clang lld llvm15")
@@ -10,12 +10,12 @@ hostmakedepends="
  libepoxy-devel libevent-devel libglib-devel"
 makedepends="
  alsa-lib-devel libdav1d-devel brotli-devel cups-devel elfutils-devel ffmpeg-devel
- fontconfig-devel freetype-devel gtk+3-devel jsoncpp-devel libXScrnSaver-devel
+ fontconfig-devel freetype-devel gtk+3-devel libXScrnSaver-devel
  libXcomposite-devel libXcursor-devel libXdamage-devel libXi-devel libXrandr-devel
  libavif-devel libcap-devel libcurl-devel libdrm-devel libevent-devel
  libexif-devel libflac-devel libgcrypt-devel libjpeg-turbo-devel libmtp-devel
  libpng-devel libva-devel libwebp-devel libxml2-devel libxshmfence-devel
- libxslt-devel woff2-devel minizip-devel mit-krb5-devel nss-devel opus-devel
+ libxslt-devel minizip-devel mit-krb5-devel nss-devel opus-devel
  pciutils-devel snappy-devel speech-dispatcher-devel speex-devel
  xcb-proto zlib-devel libaom-devel libffi-devel libevdev-devel
  $(vopt_if pipewire pipewire-devel)
@@ -27,7 +27,7 @@ maintainer="Duncaen <duncaen@voidlinux.org>"
 license="BSD-3-Clause"
 homepage="https://www.chromium.org/"
 distfiles="https://commondatastorage.googleapis.com/chromium-browser-official/${pkgname}-${version}.tar.xz"
-checksum=73cb8c39e928f8c627d747d37a3b020f08913ef5508f893758d70bdbd545dbcf
+checksum=87c00c525ee07c2233b78dbece1496b697f686244a67fac2c71e4a30bd96849b
 
 lib32disabled=yes
 
@@ -52,7 +52,7 @@ if [ "$CROSS_BUILD" ]; then
 	 $(vopt_if pipewire pipewire-devel) ffmpeg-devel opus-devel pango-devel libva-devel
 	 libcurl-devel snappy-devel libXrandr-devel libXcomposite-devel cups-devel
 	 mit-krb5-devel alsa-lib-devel libXdamage-devel libepoxy-devel libevdev-devel
-	 libavif-devel libaom-devel jsoncpp-devel woff2-devel libdav1d-devel libflac-devel
+	 libavif-devel libaom-devel libdav1d-devel libflac-devel
 	 libdrm-devel libgbm-devel"
 fi
 
@@ -82,6 +82,9 @@ post_patch() {
 	# allow system dependencies in "official builds"
 	vsed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \
 		tools/generate_shim_headers/generate_shim_headers.py
+
+	mkdir -p third_party/node/linux/node-linux-x64/bin
+	ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/
 }
 
 _setup_clang() {
@@ -144,6 +147,8 @@ do_configure() {
 	# use_system_v8=1
 	# bzip2 xdg_utils speex
 	# XXX: harfbuzz-ng use builtin one until system-wide is updated >=3.0.0
+	# libcxx https://github.com/llvm/llvm-project/issues/61705:
+	# snappy
 	system="
 		ffmpeg
 		flac
@@ -157,7 +162,6 @@ do_configure() {
 		libxml
 		libxslt
 		opus
-		snappy
 	"
 
 	# remove build scripts for system provided dependencies - basically does the
@@ -192,7 +196,7 @@ do_configure() {
 		'clang_base_path="/usr"'
 
 		"gold_path=\"${XBPS_CROSS_BASE}/usr/bin/ld.gold\""
-		'use_custom_libcxx=false'
+		'use_custom_libcxx=true' # https://github.com/llvm/llvm-project/issues/61705
 		'use_gold=false'
 
 		'rust_sysroot_absolute="/usr"'
diff --git a/srcpkgs/chromium/update b/srcpkgs/chromium/update
index c035a8fe1c3b3..af42867275488 100644
--- a/srcpkgs/chromium/update
+++ b/srcpkgs/chromium/update
@@ -1,2 +1,2 @@
-site='https://omahaproxy.appspot.com/all'
-pattern='linux,stable,\K[^,]*'
+site='https://chromiumdash.appspot.com/fetch_releases?channel=Stable&platform=Linux&num=1&offset=0'
+pattern='"version":\s*"\K[^,]+(?=")'

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PR PATCH] [Updated] chromium: update to 120.0.6099.109.
  2023-12-13 17:44 [PR PATCH] chromium: update to 120.0.6099.109 Duncaen
@ 2023-12-13 17:59 ` Duncaen
  2023-12-13 18:06 ` Duncaen
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Duncaen @ 2023-12-13 17:59 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 412 bytes --]

There is an updated pull request by Duncaen against master on the void-packages repository

https://github.com/Duncaen/void-packages chromium-120
https://github.com/void-linux/void-packages/pull/47739

chromium: update to 120.0.6099.109.
[ci skip]

* [x] x86_64-glibc
* [ ] x86_64-musl
* [ ] aarch64-musl
* [ ] i686

A patch file from https://github.com/void-linux/void-packages/pull/47739.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-chromium-120-47739.patch --]
[-- Type: text/x-diff, Size: 124247 bytes --]

From 3ef5e5a4c11fd51e8cb4acad703b876a7e2a339f Mon Sep 17 00:00:00 2001
From: Duncaen <duncaen@voidlinux.org>
Date: Wed, 13 Dec 2023 14:53:36 +0100
Subject: [PATCH] chromium: update to 120.0.6099.109.

---
 srcpkgs/chromium/files/chromium.desktop       | 112 ----
 .../chromium-118-python-3.12-deprecated.patch | 138 -----
 ...karound_clang_bug-structured_binding.patch |  96 ----
 .../patches/chromium-119-constexpr.patch      |  12 -
 ...tVideoDecoder-flag-on-VA-API-devices.patch | 195 -------
 ...-119-nullptr_t-without-namespace-std.patch |  21 -
 ...a-use-separate-bo-to-verify-modifier.patch | 164 ------
 .../chromium-120-arm64-memory_tagging.patch   |  14 +
 ...hromium-120-disable-FFmpegAllowLists.patch |  12 +
 ...ble-GlobalMediaControlsCastStartStop.patch |  14 +
 ...chromium-120-el7-clang-build-failure.patch | 230 ++++++++
 ...ium-120-el7-clang-build-failure.patch.args |   1 +
 ...romium-120-el7-clang-version-warning.patch |  16 +
 .../chromium-120-gn-workaround-atspi.patch    |  13 +
 ...> chromium-120-missing-header-files.patch} |  11 -
 ...hromium-120-no_matching_constructor.patch} | 493 ++++++++++--------
 ...20-split-threshold-for-reg-with-hint.patch |  28 +
 ...name.patch => chromium-120-typename.patch} |  41 ++
 ...karound_clang_bug-structured_binding.patch |  51 ++
 ...x-aarch64-musl-memory-tagging-macros.patch |   4 +-
 .../chromium/patches/musl-no-execinfo.patch   |   9 -
 .../chromium/patches/musl-no-mallinfo.patch   |   8 +-
 .../patches/musl-partition-atfork.patch       |   4 +-
 srcpkgs/chromium/patches/no-mte.patch         |  11 -
 srcpkgs/chromium/template                     |  31 +-
 srcpkgs/chromium/update                       |   4 +-
 26 files changed, 718 insertions(+), 1015 deletions(-)
 delete mode 100644 srcpkgs/chromium/files/chromium.desktop
 delete mode 100644 srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-constexpr.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
 rename srcpkgs/chromium/patches/{chromium-119-missing-header-files.patch => chromium-120-missing-header-files.patch} (97%)
 rename srcpkgs/chromium/patches/{chromium-119-no_matching_constructor.patch => chromium-120-no_matching_constructor.patch} (67%)
 create mode 100644 srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
 rename srcpkgs/chromium/patches/{chromium-117-typename.patch => chromium-120-typename.patch} (83%)
 create mode 100644 srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
 delete mode 100644 srcpkgs/chromium/patches/no-mte.patch

diff --git a/srcpkgs/chromium/files/chromium.desktop b/srcpkgs/chromium/files/chromium.desktop
deleted file mode 100644
index 05788f7135daa..0000000000000
--- a/srcpkgs/chromium/files/chromium.desktop
+++ /dev/null
@@ -1,112 +0,0 @@
-[Desktop Entry]
-Name=Chromium
-# Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
-# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
-GenericName=Web Browser
-GenericName[ar]=متصفح الشبكة
-GenericName[bg]=Уеб браузър
-GenericName[ca]=Navegador web
-GenericName[cs]=WWW prohlížeč
-GenericName[da]=Browser
-GenericName[de]=Web-Browser
-GenericName[el]=Περιηγητής ιστού
-GenericName[en_GB]=Web Browser
-GenericName[es]=Navegador web
-GenericName[et]=Veebibrauser
-GenericName[fi]=WWW-selain
-GenericName[fr]=Navigateur Web
-GenericName[gu]=વેબ બ્રાઉઝર
-GenericName[he]=דפדפן אינטרנט
-GenericName[hi]=वेब ब्राउज़र
-GenericName[hu]=Webböngésző
-GenericName[it]=Browser Web
-GenericName[ja]=ウェブブラウザ
-GenericName[kn]=ಜಾಲ ವೀಕ್ಷಕ
-GenericName[ko]=웹 브라우저
-GenericName[lt]=Žiniatinklio naršyklė
-GenericName[lv]=Tīmekļa pārlūks
-GenericName[ml]=വെബ് ബ്രൌസര്‍
-GenericName[mr]=वेब ब्राऊजर
-GenericName[nb]=Nettleser
-GenericName[nl]=Webbrowser
-GenericName[pl]=Przeglądarka WWW
-GenericName[pt]=Navegador Web
-GenericName[pt_BR]=Navegador da Internet
-GenericName[ro]=Navigator de Internet
-GenericName[ru]=Веб-браузер
-GenericName[sl]=Spletni brskalnik
-GenericName[sv]=Webbläsare
-GenericName[ta]=இணைய உலாவி
-GenericName[th]=เว็บเบราว์เซอร์
-GenericName[tr]=Web Tarayıcı
-GenericName[uk]=Навігатор Тенет
-GenericName[zh_CN]=网页浏览器
-GenericName[zh_HK]=網頁瀏覽器
-GenericName[zh_TW]=網頁瀏覽器
-# Not translated in KDE, from Epiphany 2.26.1-0ubuntu1.
-GenericName[bn]=ওয়েব ব্রাউজার
-GenericName[fil]=Web Browser
-GenericName[hr]=Web preglednik
-GenericName[id]=Browser Web
-GenericName[or]=ଓ୍ବେବ ବ୍ରାଉଜର
-GenericName[sk]=WWW prehliadač
-GenericName[sr]=Интернет прегледник
-GenericName[te]=మహాతల అన్వేషి
-GenericName[vi]=Bộ duyệt Web
-# Gnome and KDE 3 uses Comment.
-Comment=Access the Internet
-Comment[ar]=الدخول إلى الإنترنت
-Comment[bg]=Достъп до интернет
-Comment[bn]=ইন্টারনেটটি অ্যাক্সেস করুন
-Comment[ca]=Accedeix a Internet
-Comment[cs]=Přístup k internetu
-Comment[da]=Få adgang til internettet
-Comment[de]=Internetzugriff
-Comment[el]=Πρόσβαση στο Διαδίκτυο
-Comment[en_GB]=Access the Internet
-Comment[es]=Accede a Internet.
-Comment[et]=Pääs Internetti
-Comment[fi]=Käytä internetiä
-Comment[fil]=I-access ang Internet
-Comment[fr]=Accéder à Internet
-Comment[gu]=ઇંટરનેટ ઍક્સેસ કરો
-Comment[he]=גישה אל האינטרנט
-Comment[hi]=इंटरनेट तक पहुंच स्थापित करें
-Comment[hr]=Pristup Internetu
-Comment[hu]=Internetelérés
-Comment[id]=Akses Internet
-Comment[it]=Accesso a Internet
-Comment[ja]=インターネットにアクセス
-Comment[kn]=ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ
-Comment[ko]=인터넷 연결
-Comment[lt]=Interneto prieiga
-Comment[lv]=Piekļūt internetam
-Comment[ml]=ഇന്റര്‍‌നെറ്റ് ആക്‌സസ് ചെയ്യുക
-Comment[mr]=इंटरनेटमध्ये प्रवेश करा
-Comment[nb]=Gå til Internett
-Comment[nl]=Verbinding maken met internet
-Comment[or]=ଇଣ୍ଟର୍ନେଟ୍ ପ୍ରବେଶ କରନ୍ତୁ
-Comment[pl]=Skorzystaj z internetu
-Comment[pt]=Aceder à Internet
-Comment[pt_BR]=Acessar a internet
-Comment[ro]=Accesaţi Internetul
-Comment[ru]=Доступ в Интернет
-Comment[sk]=Prístup do siete Internet
-Comment[sl]=Dostop do interneta
-Comment[sr]=Приступите Интернету
-Comment[sv]=Gå ut på Internet
-Comment[ta]=இணையத்தை அணுகுதல்
-Comment[te]=ఇంటర్నెట్‌ను ఆక్సెస్ చెయ్యండి
-Comment[th]=เข้าถึงอินเทอร์เน็ต
-Comment[tr]=İnternet'e erişin
-Comment[uk]=Доступ до Інтернету
-Comment[vi]=Truy cập Internet
-Comment[zh_CN]=访问互联网
-Comment[zh_HK]=連線到網際網路
-Comment[zh_TW]=連線到網際網路
-Exec=chromium %U
-Terminal=false
-Icon=chromium
-Type=Application
-Categories=GTK;Network;WebBrowser;
-MimeType=text/html;text/xml;application/xhtml+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
diff --git a/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch b/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
deleted file mode 100644
index 5837ae584117d..0000000000000
--- a/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-diff -up chromium-115.0.5790.102/base/write_build_date_header.py.me chromium-115.0.5790.102/base/write_build_date_header.py
---- chromium-115.0.5790.102/base/write_build_date_header.py.me	2023-07-22 14:23:42.620679397 +0200
-+++ chromium-115.0.5790.102/base/write_build_date_header.py	2023-07-22 15:24:46.833310310 +0200
-@@ -17,7 +17,7 @@ def main():
-   args = argument_parser.parse_args()
- 
-   date_val = int(args.timestamp)
--  date = datetime.datetime.utcfromtimestamp(date_val)
-+  date =  datetime.datetime.fromtimestamp(date_val, datetime.timezone.utc)
-   output = ('// Generated by //base/write_build_date_header.py\n'
-             '#ifndef BASE_GENERATED_BUILD_DATE_TIMESTAMP \n'
-             f'#define BASE_GENERATED_BUILD_DATE_TIMESTAMP {date_val}'
-diff -up chromium-115.0.5790.102/build/write_buildflag_header.py.me chromium-115.0.5790.102/build/write_buildflag_header.py
---- chromium-115.0.5790.102/build/write_buildflag_header.py.me	2023-07-22 14:16:14.196975451 +0200
-+++ chromium-115.0.5790.102/build/write_buildflag_header.py	2023-07-22 14:20:24.977239994 +0200
-@@ -44,7 +44,7 @@ def GetOptions():
-   header_guard = cmdline_options.output.upper()
-   if header_guard[0].isdigit():
-     header_guard = '_' + header_guard
--  header_guard = re.sub('[^\w]', '_', header_guard)
-+  header_guard = re.sub(r'[^\w]', '_', header_guard)
-   header_guard += '_'
- 
-   # The actual output file is inside the gen dir.
-diff -up chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py.me chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py
---- chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py.me	2023-07-22 14:47:34.230764210 +0200
-+++ chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py	2023-07-22 15:11:50.360983383 +0200
-@@ -9,7 +9,8 @@
- """
- from __future__ import print_function
- import abc
--import imp
-+import types
-+import importlib
- import optparse
- import os
- import re
-@@ -40,6 +41,12 @@ class GoogleProtobufModuleImporter:
-         return filepath
-     return None
- 
-+  def load_source(name: str, path: str) -> types.ModuleType:
-+    spec = importlib.util.spec_from_file_location(name, path)
-+    module = importlib.util.module_from_spec(spec)
-+    spec.loader.exec_module(module)
-+    return module
-+
-   def _module_exists(self, fullname):
-     return self._fullname_to_filepath(fullname) is not None
- 
-@@ -68,7 +75,7 @@ class GoogleProtobufModuleImporter:
-       raise ImportError(fullname)
- 
-     filepath = self._fullname_to_filepath(fullname)
--    return imp.load_source(fullname, filepath)
-+    return load_source(fullname, filepath)
- 
- class BinaryProtoGenerator:
- 
-diff -up chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py.me chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py
---- chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py.me	2023-07-22 15:17:19.114258801 +0200
-+++ chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py	2023-07-22 15:17:43.368200491 +0200
-@@ -32,7 +32,7 @@ def FilterLine(filename, line, output):
-     return
- 
-   if line.startswith("goog.provide"):
--    match = re.match("goog.provide\('([^']+)'\);", line)
-+    match = re.match(r"goog.provide\('([^']+)'\);", line)
-     if not match:
-       print("Invalid goog.provide line in %s:\n%s" % (filename, line))
-       sys.exit(1)
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py.me	2023-07-22 15:12:41.850895179 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py	2023-07-22 15:12:55.844871207 +0200
-@@ -18,7 +18,7 @@ class HTMLGenerationController(object):
- 
-   def GetHTMLForInlineStylesheet(self, contents):
-     if self.current_module is None:
--      if re.search('url\(.+\)', contents):
-+      if re.search(r'url\(.+\)', contents):
-         raise Exception(
-             'Default HTMLGenerationController cannot handle inline style urls')
-       return contents
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py.me	2023-07-22 15:14:06.923717910 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py	2023-07-22 15:18:03.704150614 +0200
-@@ -4,4 +4,4 @@
- 
- 
- def EscapeJSIfNeeded(js):
--  return js.replace('</script>', '<\/script>')
-+  return js.replace(r'</script>', r'<\/script>')
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py.me	2023-07-22 15:14:30.105662532 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py	2023-07-22 15:14:57.977595950 +0200
-@@ -293,6 +293,6 @@ class HTMLModuleParser():
-       html = ''
-     else:
-       if html.find('< /script>') != -1:
--        raise Exception('Escape script tags with <\/script>')
-+        raise Exception(r'Escape script tags with <\/script>')
- 
-     return HTMLModuleParserResults(html)
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py.me	2023-07-22 15:13:12.316842990 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py	2023-07-22 15:13:49.684759091 +0200
-@@ -60,7 +60,7 @@ class ParsedStyleSheet(object):
-       return 'url(data:image/%s;base64,%s)' % (ext[1:], data.decode('utf-8'))
- 
-     # I'm assuming we only have url()'s associated with images
--    return re.sub('url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-+    return re.sub(r'url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-                   InlineUrl, self.contents)
- 
-   def AppendDirectlyDependentFilenamesTo(self, dependent_filenames):
-@@ -72,7 +72,7 @@ class ParsedStyleSheet(object):
-       raise Exception('@imports are not supported')
- 
-     matches = re.findall(
--        'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-+        r'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-         self.contents)
- 
-     def resolve_url(url):
-diff -up chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py.me chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py
---- chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py.me	2023-07-22 15:11:56.826972306 +0200
-+++ chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py	2023-07-22 15:12:37.550902545 +0200
-@@ -119,8 +119,8 @@ class _PreprocessingLoader(jinja2.BaseLo
-             source = self.preprocess(f.read())
-         return source, path, lambda: mtime == os.path.getmtime(path)
- 
--    blockstart = re.compile('{%-?\s*(if|elif|else|for|block|macro)[^}]*%}')
--    blockend = re.compile('{%-?\s*(end(if|for|block|macro)|elif|else)[^}]*%}')
-+    blockstart = re.compile(r'{%-?\s*(if|elif|else|for|block|macro)[^}]*%}')
-+    blockend = re.compile(r'{%-?\s*(end(if|for|block|macro)|elif|else)[^}]*%}')
- 
-     def preprocess(self, source):
-         lines = source.split('\n')
diff --git a/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch b/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
deleted file mode 100644
index 3b79f512487ae..0000000000000
--- a/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-diff -up chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc
---- chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:37.000000000 +0200
-+++ chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc	2023-06-17 16:53:20.216628557 +0200
-@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui
- void CdmPromiseAdapter::Clear(ClearReason reason) {
-   // Reject all outstanding promises.
-   DCHECK(thread_checker_.CalledOnValidThread());
--  for (auto& [promise_id, promise] : promises_) {
-+  for (auto& [p_i, p_e] : promises_) {
-+    auto& promise_id = p_i;
-+    auto& promise = p_e;
-     TRACE_EVENT_NESTABLE_ASYNC_END1(
-         "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id),
-         "status", "cleared");
-diff -up chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
---- chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:41.000000000 +0200
-+++ chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc	2023-06-17 18:47:06.001403966 +0200
-@@ -655,8 +658,10 @@ NGGridSizingTree NGGridLayoutAlgorithm::
-   NGGridSizingTree sizing_tree;
- 
-   if (const auto* layout_subtree = ConstraintSpace().GridLayoutSubtree()) {
--    auto& [grid_items, layout_data, subtree_size] =
--        sizing_tree.CreateSizingData();
-+    auto& [g_i, l_d, s_s] = sizing_tree.CreateSizingData();
-+    auto& grid_items = g_i;
-+    auto& layout_data = l_d;
-+    auto& subtree_size = s_s;
- 
-     const auto& node = Node();
-     grid_items =
-@@ -1798,8 +1803,10 @@ void NGGridLayoutAlgorithm::CompleteTrac
-     bool* opt_needs_additional_pass) const {
-   DCHECK(sizing_subtree);
- 
--  auto& [grid_items, layout_data, subtree_size] =
--      sizing_subtree.SubtreeRootData();
-+  auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData();
-+  auto& grid_items = g_i;
-+  auto& layout_data = l_d;
-+  auto& subtree_size = s_s;
- 
-   const bool is_for_columns = track_direction == kForColumns;
-   const bool has_non_definite_track =
-@@ -1924,8 +1931,10 @@ template <typename CallbackFunc>
- void NGGridLayoutAlgorithm::ForEachSubgrid(
-     const NGGridSizingSubtree& sizing_subtree,
-     const CallbackFunc& callback_func) const {
--  auto& [grid_items, layout_data, subtree_size] =
--      sizing_subtree.SubtreeRootData();
-+  auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData();
-+  auto& grid_items = g_i;
-+  auto& layout_data = l_d;
-+  auto& subtree_size = s_s;
- 
-   // If we know this subtree doesn't have nested subgrids we can exit early
-   // instead of iterating over every grid item looking for them.
-diff -up chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc
---- chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me	2023-06-19 08:04:02.287072722 +0200
-+++ chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc	2023-06-19 08:18:24.576814950 +0200
-@@ -1393,7 +1393,8 @@ void ServiceWorkerContextWrapper::MaybeP
-     return;
-   }
- 
--  auto [document_url, key, callback] = std::move(*request);
-+  auto [d_u, key, callback] = std::move(*request);
-+  auto document_url = d_u;
- 
-   DCHECK(document_url.is_valid());
-   TRACE_EVENT1("ServiceWorker",
-diff -up chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.me chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
---- chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.me	2023-09-15 13:03:00.787257048 +0200
-+++ chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc	2023-09-15 13:15:05.502706522 +0200
-@@ -3437,7 +3437,10 @@ void NGGridLayoutAlgorithm::PlaceGridIte
-   DCHECK(out_row_break_between);
- 
-   const auto& container_space = ConstraintSpace();
--  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
-+  const auto& [g_i, l_d, t_s] = sizing_tree.TreeRootData();
-+  const auto& grid_items = g_i;
-+  const auto& layout_data = l_d;
-+  const auto& tree_size = t_s;
- 
-   const auto* cached_layout_subtree = container_space.GridLayoutSubtree();
-   const auto container_writing_direction =
-@@ -3601,7 +3604,10 @@ void NGGridLayoutAlgorithm::PlaceGridIte
- 
-   // TODO(ikilpatrick): Update |SetHasSeenAllChildren| and early exit if true.
-   const auto& constraint_space = ConstraintSpace();
--  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
-+  const auto& [g_i, l_d, t_s] = sizing_tree.TreeRootData();
-+  const auto& grid_items = g_i;
-+  const auto& layout_data = l_d;
-+  const auto& tree_size =t_s;
- 
-   const auto* cached_layout_subtree = constraint_space.GridLayoutSubtree();
-   const auto container_writing_direction =
diff --git a/srcpkgs/chromium/patches/chromium-119-constexpr.patch b/srcpkgs/chromium/patches/chromium-119-constexpr.patch
deleted file mode 100644
index b195ff408ba81..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-constexpr.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h.me chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h
---- chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h.me	2023-10-31 21:05:05.548565241 +0100
-+++ chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h	2023-10-31 21:20:53.945532094 +0100
-@@ -93,7 +93,7 @@ class MiracleParameter {
- template <>
- class MiracleParameter<std::string> : public MiracleParameterBase<std::string> {
-  public:
--  constexpr MiracleParameter(const base::Feature* feature,
-+  MiracleParameter(const base::Feature* feature,
-                              const char* param_name,
-                              std::string default_value)
-       : MiracleParameterBase(feature, param_name, std::move(default_value)) {}
diff --git a/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch b/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
deleted file mode 100644
index 88d675e8047f0..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
+++ /dev/null
@@ -1,195 +0,0 @@
-commit 87fca7f1759e800bd72b5ab6511eea17d6400a76
-Author: Pilar Molina Lopez <pmolinalopez@chromium.org>
-Date:   Tue Oct 24 19:57:55 2023 +0000
-
-    video: hide UseChromeOSDirectVideoDecoder flag on VA-API devices
-    
-    We are seeing crashes causes by this CHECK statement:
-    https://source.chromium.org/chromium/chromium/src/+/main:content/public/browser/gpu_utils.cc;l=151;drc=0e777ba9b6c34611705d5b145c92bcd09539011c
-    It's triggered when the user manually disables the UseChromeOSDirectVideoDecoder
-    flag on VA-API devices (Intel and AMD). This flag is supported only on
-    non-Intel and non-AMD devices. This CL adds this information to the flag
-    description and hides the flag in case VA-API is used.
-    
-    Bug: 1469285
-    Test: manual test on volteer
-    Change-Id: I153b9ccb3815498c91ce5eee966834060749e247
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4960919
-    Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
-    Reviewed-by: Andres Calderon Jaramillo <andrescj@chromium.org>
-    Reviewed-by: Avi Drissman <avi@chromium.org>
-    Commit-Queue: Pilar Molina Lopez <pmolinalopez@chromium.org>
-    Cr-Commit-Position: refs/heads/main@{#1214411}
-
-diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
-index ee9fb206cde36..0fe18013ab044 100644
---- a/chrome/browser/DEPS
-+++ b/chrome/browser/DEPS
-@@ -418,6 +418,7 @@ include_rules = [
-   "+media/base",  # For media switches
-   "+media/capabilities", # For InMemoryVideoDecodeStatsDB
-   "+media/cdm",
-+  "+media/gpu/buildflags.h",
-   "+media/remoting/device_capability_checker.h",
-   "+media/capture",
-   "+media/midi",  # For midi switches
-diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
-index 84709afaa34d0..777bebeb33d9e 100644
---- a/chrome/browser/about_flags.cc
-+++ b/chrome/browser/about_flags.cc
-@@ -7578,11 +7578,13 @@ const FeatureEntry kFeatureEntries[] = {
- #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
- 
- #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-+#if !BUILDFLAG(USE_VAAPI)
-     {"chromeos-direct-video-decoder",
-      flag_descriptions::kChromeOSDirectVideoDecoderName,
-      flag_descriptions::kChromeOSDirectVideoDecoderDescription,
-      kOsCrOS | kOsLacros,
-      FEATURE_VALUE_TYPE(media::kUseChromeOSDirectVideoDecoder)},
-+#endif  // !BUILDFLAG(USE_VAAPI)
- 
-     {"enable-vbr-encode-acceleration",
-      flag_descriptions::kChromeOSHWVBREncodingName,
-diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
-index 318a8be9ab1a6..d2497d0c403f3 100644
---- a/chrome/browser/flag_descriptions.cc
-+++ b/chrome/browser/flag_descriptions.cc
-@@ -7,6 +7,7 @@
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "components/supervised_user/core/common/buildflags.h"
-+#include "media/gpu/buildflags.h"
- #include "pdf/buildflags.h"
- 
- // Keep in identical order as the header file, see the comment at the top
-@@ -7338,6 +7339,7 @@ const char kQuickOfficeForceFileDownloadDescription[] =
- #endif  // BUILDFLAG(IS_CHROMEOS)
- 
- #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-+#if !BUILDFLAG(USE_VAAPI)
- const char kChromeOSDirectVideoDecoderName[] = "ChromeOS Direct Video Decoder";
- const char kChromeOSDirectVideoDecoderDescription[] =
-     "Enables the hardware-accelerated ChromeOS direct media::VideoDecoder "
-@@ -7345,7 +7347,8 @@ const char kChromeOSDirectVideoDecoderDescription[] =
-     "--platform-disallows-chromeos-direct-video-decoder command line switch "
-     "which is added for platforms where said direct VideoDecoder does not work "
-     "or is not well tested (see the disable_cros_video_decoder USE flag in "
--    "ChromeOS)";
-+    "ChromeOS). This flag is supported only on non-Intel and non-AMD devices.";
-+#endif  // !BUILDFLAG(USE_VAAPI)
- const char kChromeOSHWVBREncodingName[] =
-     "ChromeOS Hardware Variable Bitrate Encoding";
- const char kChromeOSHWVBREncodingDescription[] =
-diff --git a/content/public/browser/gpu_utils.cc b/content/public/browser/gpu_utils.cc
-index dceeca9659a85..3d091359777cc 100644
---- a/content/public/browser/gpu_utils.cc
-+++ b/content/public/browser/gpu_utils.cc
-@@ -133,20 +133,26 @@ const gpu::GpuPreferences GetGpuPreferencesFromCommandLine() {
- #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-   // The direct VideoDecoder is disallowed on some particular SoC/platforms.
-   const bool should_use_direct_video_decoder =
-+#if BUILDFLAG(USE_VAAPI)
-+      true;
-+#else
-       !command_line->HasSwitch(
-           switches::kPlatformDisallowsChromeOSDirectVideoDecoder) &&
-       base::FeatureList::IsEnabled(media::kUseChromeOSDirectVideoDecoder);
-+#endif  // BUILDFLAG(USE_VAAPI)
-+
-+  gpu_preferences.enable_chromeos_direct_video_decoder =
-+#if BUILDFLAG(USE_VAAPI)
-+      should_use_direct_video_decoder;
-+#else
-+      // For testing purposes, the following flag allows using the "other" video
-+      // decoder implementation.
-+      base::FeatureList::IsEnabled(
-+          media::kUseAlternateVideoDecoderImplementation)
-+          ? !should_use_direct_video_decoder
-+          : should_use_direct_video_decoder;
-+#endif  // BUILDFLAG(USE_VAAPI)
- 
--  // For testing purposes, the following flag allows using the "other" video
--  // decoder implementation.
--  if (base::FeatureList::IsEnabled(
--          media::kUseAlternateVideoDecoderImplementation)) {
--    gpu_preferences.enable_chromeos_direct_video_decoder =
--        !should_use_direct_video_decoder;
--  } else {
--    gpu_preferences.enable_chromeos_direct_video_decoder =
--        should_use_direct_video_decoder;
--  }
- #if BUILDFLAG(USE_VAAPI)
-   CHECK(gpu_preferences.enable_chromeos_direct_video_decoder);
- #endif  // BUILDFLAG(USE_VAAPI)
-diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
-index 1af4de46e2a02..3086b1bec2134 100644
---- a/media/base/media_switches.cc
-+++ b/media/base/media_switches.cc
-@@ -1192,6 +1192,7 @@ BASE_FEATURE(kChromeOSHWVBREncoding,
-              "ChromeOSHWVBREncoding",
-              base::FEATURE_DISABLED_BY_DEFAULT);
- 
-+#if !BUILDFLAG(USE_VAAPI)
- // Enable the hardware-accelerated direct video decoder instead of the one
- // needing the VdaVideoDecoder adapter. This flag is used mainly as a
- // chrome:flag for developers debugging issues as well as to be able to
-@@ -1200,6 +1201,7 @@ BASE_FEATURE(kChromeOSHWVBREncoding,
- BASE_FEATURE(kUseChromeOSDirectVideoDecoder,
-              "UseChromeOSDirectVideoDecoder",
-              base::FEATURE_ENABLED_BY_DEFAULT);
-+#endif  // !BUILDFLAG(USE_VAAPI)
- 
- // Limit the number of concurrent hardware decoder instances on ChromeOS.
- BASE_FEATURE(kLimitConcurrentDecoderInstances,
-@@ -1228,7 +1230,7 @@ BASE_FEATURE(kPreferSoftwareMT21,
-              "PreferSoftwareMT21",
-              base::FEATURE_DISABLED_BY_DEFAULT);
- #endif  // defined(ARCH_CPU_ARM_FAMILY)
--#if BUILDFLAG(IS_CHROMEOS)
-+#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- // ChromeOS has one of two VideoDecoder implementations active based on
- // SoC/board specific configurations that are sent via command line flags. This
- // switch allows using the non default implementation for testing.
-@@ -1236,7 +1238,7 @@ BASE_FEATURE(kPreferSoftwareMT21,
- BASE_FEATURE(kUseAlternateVideoDecoderImplementation,
-              "UseAlternateVideoDecoderImplementation",
-              base::FEATURE_DISABLED_BY_DEFAULT);
--#endif  // BUILDFLAG(IS_CHROMEOS)
-+#endif  // BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- 
- #if BUILDFLAG(IS_WIN)
-diff --git a/media/base/media_switches.h b/media/base/media_switches.h
-index 1d9c2c2d9df73..96d9595be110e 100644
---- a/media/base/media_switches.h
-+++ b/media/base/media_switches.h
-@@ -14,6 +14,7 @@
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "media/base/media_export.h"
-+#include "media/gpu/buildflags.h"
- #include "media/media_buildflags.h"
- 
- namespace base {
-@@ -381,16 +382,18 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kBuiltInHlsPlayer);
- #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kChromeOSHWAV1Decoder);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kChromeOSHWVBREncoding);
-+#if !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseChromeOSDirectVideoDecoder);
-+#endif  // !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kLimitConcurrentDecoderInstances);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUSeSequencedTaskRunnerForVEA);
- #if defined(ARCH_CPU_ARM_FAMILY)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kPreferGLImageProcessor);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kPreferSoftwareMT21);
- #endif  // defined(ARCH_CPU_ARM_FAMILY)
--#if BUILDFLAG(IS_CHROMEOS)
-+#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseAlternateVideoDecoderImplementation);
--#endif  // BUILDFLAG(IS_CHROMEOS)
-+#endif  // BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- 
- #if BUILDFLAG(IS_WIN)
diff --git a/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch b/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
deleted file mode 100644
index 5cb969f4f40cf..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h.me chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h
---- chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h.me	2023-10-27 20:07:16.421230815 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h	2023-10-27 20:07:36.883600085 +0200
-@@ -52,7 +52,7 @@ class FragmentDataIterator
-  public:
-   explicit FragmentDataIterator(const LayoutObject& object)
-       : FragmentDataIteratorBase(&object.FirstFragment()) {}
--  explicit FragmentDataIterator(nullptr_t)
-+  explicit FragmentDataIterator(std::nullptr_t)
-       : FragmentDataIteratorBase(nullptr) {}
- };
- 
-@@ -63,7 +63,7 @@ class MutableFragmentDataIterator
-   explicit MutableFragmentDataIterator(const LayoutObject& object)
-       : FragmentDataIteratorBase(
-             &object.GetMutableForPainting().FirstFragment()) {}
--  explicit MutableFragmentDataIterator(nullptr_t)
-+  explicit MutableFragmentDataIterator(std::nullptr_t)
-       : FragmentDataIteratorBase(nullptr) {}
- };
- 
diff --git a/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch b/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
deleted file mode 100644
index 717d897446c7c..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-commit bdcc23e0a5e7e220660d3f54c97262f9a4c31606
-Author: Nick Diego Yamane <nickdiego@igalia.com>
-Date:   Thu Nov 2 17:26:25 2023 +0000
-
-    gbm: nvidia: use separate bo to verify modifiers
-    
-    Buggy Nvidia drivers fail to return FDs for planes of a BO which had
-    already an imported BO destroyed before. This is a workaround for that
-    issue, which consists of creating/destroying a separate 1x1 BO for
-    validating the modifiers before actually creating the final requested
-    BO, which for now is limited to IS_LINUX builds.
-    
-    The Nvidia driver bug is being tracked under internal bug 4315529. There
-    seems to be other issues when running under Wayland with Nvidia, which
-    will be tracked and addressed in separate patches.
-    
-    R=dcastagna, msisov@igalia.com
-    
-      with ozone/wayland backend and verify GPU acceleration is not broken.
-    
-    Test: In a single Nvidia GPU setup, with proprietary driver, run Chrome
-    Bug: 1273758, 1478684, 1463851
-    Change-Id: I9f322bcf40b460bcd4ead02f05dd2e9a8d271cea
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4989782
-    Reviewed-by: Maksim Sisov <msisov@igalia.com>
-    Commit-Queue: Nick Yamane <nickdiego@igalia.com>
-    Cr-Commit-Position: refs/heads/main@{#1218924}
-
-diff --git a/ui/gfx/linux/gbm_wrapper.cc b/ui/gfx/linux/gbm_wrapper.cc
-index bf90b76605f68..14918c19c0ab0 100644
---- a/ui/gfx/linux/gbm_wrapper.cc
-+++ b/ui/gfx/linux/gbm_wrapper.cc
-@@ -11,6 +11,7 @@
- #include "base/logging.h"
- #include "base/memory/raw_ptr.h"
- #include "base/memory/raw_ptr_exclusion.h"
-+#include "base/numerics/safe_conversions.h"
- #include "base/posix/eintr_wrapper.h"
- #include "skia/ext/legacy_display_globals.h"
- #include "third_party/skia/include/core/SkSurface.h"
-@@ -71,6 +72,7 @@ base::ScopedFD GetPlaneFdForBo(gbm_bo* bo, size_t plane) {
-   int ret;
-   // Use DRM_RDWR to allow the fd to be mappable in another process.
-   ret = drmPrimeHandleToFD(dev_fd, plane_handle, DRM_CLOEXEC | DRM_RDWR, &fd);
-+  PLOG_IF(ERROR, ret != 0) << "Failed to get fd for plane.";
- 
-   // Older DRM implementations blocked DRM_RDWR, but gave a read/write mapping
-   // anyways
-@@ -301,58 +303,82 @@ class Device final : public ui::GbmDevice {
- 
-   std::unique_ptr<ui::GbmBuffer> CreateBufferWithModifiers(
-       uint32_t format,
--      const gfx::Size& size,
-+      const gfx::Size& requested_size,
-       uint32_t flags,
-       const std::vector<uint64_t>& modifiers) override {
--    if (modifiers.empty())
--      return CreateBuffer(format, size, flags);
--
--    std::vector<uint64_t> filtered_modifiers =
--        GetFilteredModifiers(format, flags, modifiers);
--    struct gbm_bo* bo = nullptr;
--    while (filtered_modifiers.size() > 0) {
--      bo = gbm_bo_create_with_modifiers(device_, size.width(), size.height(),
--                                        format, filtered_modifiers.data(),
--                                        filtered_modifiers.size());
--      if (!bo) {
-+    if (modifiers.empty()) {
-+      return CreateBuffer(format, requested_size, flags);
-+    }
-+
-+    // Buggy drivers prevent us from getting plane FDs from a BO which had its
-+    // previously imported BO destroyed. E.g: Nvidia. Thus, on Linux Desktop, we
-+    // do the create/import modifiers validation loop below using a separate set
-+    // of 1x1 BOs which are destroyed before creating the final BO creation used
-+    // to instantiate the returned GbmBuffer.
-+    gfx::Size size =
-+#if BUILDFLAG(IS_LINUX)
-+        gfx::Size(1, 1);
-+#else
-+        requested_size;
-+#endif
-+    auto filtered_modifiers = GetFilteredModifiers(format, flags, modifiers);
-+    struct gbm_bo* created_bo = nullptr;
-+    bool valid_modifiers = false;
-+
-+    while (!valid_modifiers && !filtered_modifiers.empty()) {
-+      created_bo = gbm_bo_create_with_modifiers(
-+          device_, size.width(), size.height(), format,
-+          filtered_modifiers.data(), filtered_modifiers.size());
-+      if (!created_bo) {
-         return nullptr;
-       }
- 
--      struct gbm_import_fd_modifier_data fd_data;
--      fd_data.width = size.width();
--      fd_data.height = size.height();
--      fd_data.format = format;
--      fd_data.num_fds = gbm_bo_get_plane_count(bo);
--      fd_data.modifier = gbm_bo_get_modifier(bo);
--
--      // Store fds in the vector of base::ScopedFDs. Will be released
--      // automatically.
-+      const int planes_count = gbm_bo_get_plane_count(created_bo);
-+      struct gbm_import_fd_modifier_data fd_data = {
-+          .width = base::checked_cast<uint32_t>(size.width()),
-+          .height = base::checked_cast<uint32_t>(size.height()),
-+          .format = format,
-+          .num_fds = base::checked_cast<uint32_t>(planes_count),
-+          .modifier = gbm_bo_get_modifier(created_bo)};
-+      // Store fds in a base::ScopedFDs vector. Will be released automatically.
-       std::vector<base::ScopedFD> fds;
-       for (size_t i = 0; i < static_cast<size_t>(fd_data.num_fds); ++i) {
--        fds.emplace_back(GetPlaneFdForBo(bo, i));
-+        fds.emplace_back(GetPlaneFdForBo(created_bo, i));
-         fd_data.fds[i] = fds.back().get();
--        fd_data.strides[i] = gbm_bo_get_stride_for_plane(bo, i);
--        fd_data.offsets[i] = gbm_bo_get_offset(bo, i);
-+        fd_data.strides[i] = gbm_bo_get_stride_for_plane(created_bo, i);
-+        fd_data.offsets[i] = gbm_bo_get_offset(created_bo, i);
-       }
- 
--      struct gbm_bo* bo_import =
-+      struct gbm_bo* imported_bo =
-           gbm_bo_import(device_, GBM_BO_IMPORT_FD_MODIFIER, &fd_data, flags);
--      if (bo_import) {
--        gbm_bo_destroy(bo_import);
--        break;
-+
-+      if (imported_bo) {
-+        valid_modifiers = true;
-+        gbm_bo_destroy(imported_bo);
-       } else {
--        gbm_bo_destroy(bo);
--        bo = nullptr;
-         AddModifierToBlocklist(format, flags, fd_data.modifier);
-         filtered_modifiers =
-             GetFilteredModifiers(format, flags, filtered_modifiers);
-       }
-+
-+      if (!valid_modifiers || size != requested_size) {
-+        gbm_bo_destroy(created_bo);
-+        created_bo = nullptr;
-+      }
-     }
--    if (!bo) {
--      return nullptr;
-+
-+    // If modifiers were successfully verified though `created_bo` is null here,
-+    // it it means that the buffer created for verification could not be reused,
-+    // ie: different size, so create it now with the `requested_size`.
-+    if (valid_modifiers && !created_bo) {
-+      created_bo = gbm_bo_create_with_modifiers(
-+          device_, requested_size.width(), requested_size.height(), format,
-+          filtered_modifiers.data(), filtered_modifiers.size());
-+      PLOG_IF(ERROR, !created_bo) << "Failed to create BO with modifiers.";
-     }
- 
--    return CreateBufferForBO(bo, format, size, flags);
-+    return created_bo ? CreateBufferForBO(created_bo, format, size, flags)
-+                      : nullptr;
-   }
- 
-   std::unique_ptr<ui::GbmBuffer> CreateBufferFromHandle(
diff --git a/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch b/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
new file mode 100644
index 0000000000000..bb461ef3664a2
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
@@ -0,0 +1,14 @@
+--- chromium-120.0.6099.35/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h.than	2023-11-26 13:50:07.005519877 +0100
++++ chromium-120.0.6099.35/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h	2023-11-26 13:50:49.727267240 +0100
+@@ -152,10 +152,7 @@
+   (!BUILDFLAG(PUT_REF_COUNT_IN_PREVIOUS_SLOT) && \
+    defined(ARCH_CPU_LITTLE_ENDIAN))
+ 
+-#define PA_CONFIG_HAS_MEMORY_TAGGING()              \
+-  (defined(ARCH_CPU_ARM64) && defined(__clang__) && \
+-   !defined(ADDRESS_SANITIZER) &&                   \
+-   (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
++#define PA_CONFIG_HAS_MEMORY_TAGGING() 0
+ 
+ #if PA_CONFIG(HAS_MEMORY_TAGGING)
+ static_assert(sizeof(void*) == 8);
diff --git a/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch b/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
new file mode 100644
index 0000000000000..98216ddb465ca
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
@@ -0,0 +1,12 @@
+diff -up chromium-120.0.6099.56/media/base/media_switches.cc.me chromium-120.0.6099.56/media/base/media_switches.cc
+--- chromium-120.0.6099.56/media/base/media_switches.cc.me	2023-12-02 11:43:21.990775897 +0100
++++ chromium-120.0.6099.56/media/base/media_switches.cc	2023-12-02 11:45:23.248006377 +0100
+@@ -1636,7 +1636,7 @@ BASE_FEATURE(kUseSharedImagesForPepperVi
+ // Enables FFmpeg allow lists for supported codecs / containers.
+ BASE_FEATURE(kFFmpegAllowLists,
+              "FFmpegAllowLists",
+-             base::FEATURE_ENABLED_BY_DEFAULT);
++             base::FEATURE_DISABLED_BY_DEFAULT);
+ 
+ #if BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS)
+ // Allows decoding of theora / vp3 content.
diff --git a/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch b/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
new file mode 100644
index 0000000000000..6a2585b953c3b
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
@@ -0,0 +1,14 @@
+--- chromium-120.0.6099.35/chrome/browser/media/router/media_router_feature.cc.orig	2023-11-26 13:25:34.724228755 +0100
++++ chromium-120.0.6099.35/chrome/browser/media/router/media_router_feature.cc	2023-11-26 13:28:26.452359146 +0100
+@@ -71,11 +71,7 @@
+ // TODO(b/202294946): Remove when enabled by default on ChromeOS.
+ BASE_FEATURE(kGlobalMediaControlsCastStartStop,
+              "GlobalMediaControlsCastStartStop",
+-#if BUILDFLAG(IS_CHROMEOS)
+              base::FEATURE_DISABLED_BY_DEFAULT);
+-#else
+-             base::FEATURE_ENABLED_BY_DEFAULT);
+-#endif  // BUILDFLAG(IS_CHROMEOS)
+ #endif  // !BUILDFLAG(IS_ANDROID)
+ 
+ namespace {
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
new file mode 100644
index 0000000000000..96258e67aaebb
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
@@ -0,0 +1,230 @@
+commit 57526b8dc45b2e6c67bba7306f1dde73b1f2910c
+Author: sisidovski <sisidovski@chromium.org>
+Date:   Tue Oct 24 09:32:49 2023 +0000
+
+    Remove unused items from the RaceNetworkRequest hashmap
+    
+    When the AutoPreload or the race-network-and-fetch-handler option in the
+    static routing API is enabled, network requests are dispatched and
+    URLLoaderFactories are held in a hashmap in ServiceWorkerGlobalScope.
+    Those are consumed inside the fetch handler when fetch(e.request) is
+    called. But if the fetch handler doesn't call fetch() e.g. fallback,
+    those hashmap items does not have a chance to be removed.
+    
+    This CL changes the hashmap items to be removed when the fetch event
+    finishes, and the URLLoaderFactory is still not consumed at that time.
+    This may loose the dedupe capability if fetch() is called later e.g.
+    setTimeout(() => fetch()), but it makes sense to prioritize keeping the
+    hashmap small.
+    
+    Change-Id: I51bdc9d5eb5185f2b5b4df6ee785715b1180c848
+    Bug: 1492640
+    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4964840
+    Reviewed-by: Minoru Chikamune <chikamune@chromium.org>
+    Commit-Queue: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+    Reviewed-by: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+    Cr-Commit-Position: refs/heads/main@{#1214064}
+
+diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+index 02887edc10883..b3624fc0162df 100644
+--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
++++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+@@ -46,6 +46,7 @@
+ #include "services/network/public/cpp/cross_origin_embedder_policy.h"
+ #include "services/network/public/mojom/cookie_manager.mojom-blink.h"
+ #include "services/network/public/mojom/cross_origin_embedder_policy.mojom.h"
++#include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
+ #include "third_party/blink/public/common/features.h"
+ #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
+ #include "third_party/blink/public/mojom/notifications/notification.mojom-blink.h"
+@@ -1096,6 +1097,10 @@ void ServiceWorkerGlobalScope::DidHandleFetchEvent(
+       TRACE_ID_WITH_SCOPE(kServiceWorkerGlobalScopeTraceScope,
+                           TRACE_ID_LOCAL(event_id)),
+       TRACE_EVENT_FLAG_FLOW_IN, "status", MojoEnumToString(status));
++
++  // Delete the URLLoaderFactory for the RaceNetworkRequest if it's not used.
++  RemoveItemFromRaceNetworkRequests(event_id);
++
+   if (!RunEventCallback(&fetch_event_callbacks_, event_queue_.get(), event_id,
+                         status)) {
+     // The event may have been aborted. Its response callback also needs to be
+@@ -1495,6 +1500,7 @@ void ServiceWorkerGlobalScope::AbortCallbackForFetchEvent(
+     response_callback_iter->value->TakeValue().reset();
+     fetch_response_callbacks_.erase(response_callback_iter);
+   }
++  RemoveItemFromRaceNetworkRequests(event_id);
+ 
+   // Run the event callback with the error code.
+   auto event_callback_iter = fetch_event_callbacks_.find(event_id);
+@@ -1551,52 +1557,11 @@ void ServiceWorkerGlobalScope::StartFetchEvent(
+ 
+   if (params->race_network_request_loader_factory &&
+       params->request->service_worker_race_network_request_token) {
+-    auto insert_result = race_network_request_loader_factories_.insert(
+-        String(params->request->service_worker_race_network_request_token
+-                   ->ToString()),
+-        std::move(params->race_network_request_loader_factory));
+-
+-    // DumpWithoutCrashing if the token is empty, or not inserted as a new entry
+-    // to |race_network_request_loader_factories_|.
+-    // TODO(crbug.com/1492640) Remove DumpWithoutCrashing once we collect data
+-    // and identify the cause.
+-    static bool has_dumped_without_crashing_for_empty_token = false;
+-    static bool has_dumped_without_crashing_for_not_new_entry = false;
+-    if (!has_dumped_without_crashing_for_empty_token &&
+-        params->request->service_worker_race_network_request_token
+-            ->is_empty()) {
+-      has_dumped_without_crashing_for_empty_token = true;
+-      SCOPED_CRASH_KEY_BOOL(
+-          "SWGlobalScope", "empty_race_token",
+-          params->request->service_worker_race_network_request_token
+-              ->is_empty());
+-      SCOPED_CRASH_KEY_STRING64(
+-          "SWGlobalScope", "race_token_string",
+-          params->request->service_worker_race_network_request_token
+-              ->ToString());
+-      SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
+-                            insert_result.is_new_entry);
+-      SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
+-                                 params->request->url.GetString().Utf8());
+-      base::debug::DumpWithoutCrashing();
+-    }
+-    if (!has_dumped_without_crashing_for_not_new_entry &&
+-        !insert_result.is_new_entry) {
+-      has_dumped_without_crashing_for_not_new_entry = true;
+-      SCOPED_CRASH_KEY_BOOL(
+-          "SWGlobalScope", "empty_race_token",
+-          params->request->service_worker_race_network_request_token
+-              ->is_empty());
+-      SCOPED_CRASH_KEY_STRING64(
+-          "SWGlobalScope", "race_token_string",
+-          params->request->service_worker_race_network_request_token
+-              ->ToString());
+-      SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
+-                            insert_result.is_new_entry);
+-      SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
+-                                 params->request->url.GetString().Utf8());
+-      base::debug::DumpWithoutCrashing();
+-    }
++    InsertNewItemToRaceNetworkRequests(
++        event_id,
++        params->request->service_worker_race_network_request_token.value(),
++        std::move(params->race_network_request_loader_factory),
++        params->request->url);
+   }
+ 
+   Request* request = Request::Create(
+@@ -2808,12 +2773,71 @@ bool ServiceWorkerGlobalScope::SetAttributeEventListener(
+ absl::optional<mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>
+ ServiceWorkerGlobalScope::FindRaceNetworkRequestURLLoaderFactory(
+     const base::UnguessableToken& token) {
+-  mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> result =
+-      race_network_request_loader_factories_.Take(String(token.ToString()));
++  std::unique_ptr<RaceNetworkRequestInfo> result =
++      race_network_requests_.Take(String(token.ToString()));
+   if (result) {
+-    return result;
++    race_network_request_fetch_event_ids_.erase(result->fetch_event_id);
++    return absl::optional<
++        mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>(
++        std::move(result->url_loader_factory));
+   }
+   return absl::nullopt;
+ }
+ 
++void ServiceWorkerGlobalScope::InsertNewItemToRaceNetworkRequests(
++    int fetch_event_id,
++    const base::UnguessableToken& token,
++    mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++        url_loader_factory,
++    const KURL& request_url) {
++  auto race_network_request_token = String(token.ToString());
++  auto info = std::make_unique<RaceNetworkRequestInfo>(
++      fetch_event_id, race_network_request_token,
++      std::move(url_loader_factory));
++  race_network_request_fetch_event_ids_.insert(fetch_event_id, info.get());
++  auto insert_result = race_network_requests_.insert(race_network_request_token,
++                                                     std::move(info));
++
++  // DumpWithoutCrashing if the token is empty, or not inserted as a new entry
++  // to |race_network_request_loader_factories_|.
++  // TODO(crbug.com/1492640) Remove DumpWithoutCrashing once we collect data
++  // and identify the cause.
++  static bool has_dumped_without_crashing_for_empty_token = false;
++  static bool has_dumped_without_crashing_for_not_new_entry = false;
++  if (!has_dumped_without_crashing_for_empty_token && token.is_empty()) {
++    has_dumped_without_crashing_for_empty_token = true;
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "empty_race_token",
++                          token.is_empty());
++    SCOPED_CRASH_KEY_STRING64("SWGlobalScope", "race_token_string",
++                              token.ToString());
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
++                          insert_result.is_new_entry);
++    SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
++                               request_url.GetString().Utf8());
++    base::debug::DumpWithoutCrashing();
++  }
++  if (!has_dumped_without_crashing_for_not_new_entry &&
++      !insert_result.is_new_entry) {
++    has_dumped_without_crashing_for_not_new_entry = true;
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "empty_race_token",
++                          token.is_empty());
++    SCOPED_CRASH_KEY_STRING64("SWGlobalScope", "race_token_string",
++                              token.ToString());
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
++                          insert_result.is_new_entry);
++    SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
++                               request_url.GetString().Utf8());
++    base::debug::DumpWithoutCrashing();
++  }
++}
++
++void ServiceWorkerGlobalScope::RemoveItemFromRaceNetworkRequests(
++    int fetch_event_id) {
++  RaceNetworkRequestInfo* info =
++      race_network_request_fetch_event_ids_.Take(fetch_event_id);
++  if (info) {
++    race_network_requests_.erase(info->token);
++  }
++}
++
+ }  // namespace blink
+diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+index 46c431b395825..ac4cac0b1d8fb 100644
+--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
++++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+@@ -623,6 +623,14 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final
+   // ServiceWorker.FetchEvent.QueuingTime histogram.
+   void RecordQueuingTime(base::TimeTicks created_time);
+ 
++  void InsertNewItemToRaceNetworkRequests(
++      int fetch_event_id,
++      const base::UnguessableToken& token,
++      mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++          url_loader_factory,
++      const KURL& request_url);
++  void RemoveItemFromRaceNetworkRequests(int fetch_event_id);
++
+   Member<ServiceWorkerClients> clients_;
+   Member<ServiceWorkerRegistration> registration_;
+   Member<::blink::ServiceWorker> service_worker_;
+@@ -768,10 +776,17 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final
+ 
+   blink::BlinkStorageKey storage_key_;
+ 
++  struct RaceNetworkRequestInfo {
++    int fetch_event_id;
++    String token;
++    mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++        url_loader_factory;
++  };
+   // TODO(crbug.com/918702) WTF::HashMap cannot use base::UnguessableToken as a
+   // key. As a workaround uses WTF::String as a key instead.
+-  HashMap<String, mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>
+-      race_network_request_loader_factories_;
++  HashMap<String, std::unique_ptr<RaceNetworkRequestInfo>>
++      race_network_requests_;
++  HashMap<int, RaceNetworkRequestInfo*> race_network_request_fetch_event_ids_;
+ 
+   HeapMojoAssociatedRemote<mojom::blink::AssociatedInterfaceProvider>
+       remote_associated_interfaces_{this};
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
new file mode 100644
index 0000000000000..8bbbbe9483632
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
@@ -0,0 +1 @@
+-RNp1
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch b/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
new file mode 100644
index 0000000000000..112da65b4d9b6
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
@@ -0,0 +1,16 @@
+diff -up chromium-120.0.6099.56/third_party/libc++/src/include/__config.me chromium-120.0.6099.56/third_party/libc++/src/include/__config
+--- chromium-120.0.6099.56/third_party/libc++/src/include/__config.me	2023-12-03 00:05:51.254483474 +0100
++++ chromium-120.0.6099.56/third_party/libc++/src/include/__config	2023-12-03 00:06:05.872863168 +0100
+@@ -32,11 +32,7 @@
+ 
+ // Warn if a compiler version is used that is not supported anymore
+ // LLVM RELEASE Update the minimum compiler versions
+-#  if defined(_LIBCPP_CLANG_VER)
+-#    if _LIBCPP_CLANG_VER < 1500
+-#      warning "Libc++ only supports Clang 15 and later"
+-#    endif
+-#  elif defined(_LIBCPP_APPLE_CLANG_VER)
++#  if defined(_LIBCPP_APPLE_CLANG_VER)
+ #    if _LIBCPP_APPLE_CLANG_VER < 1500
+ #      warning "Libc++ only supports AppleClang 15 and later"
+ #    endif
diff --git a/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch b/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
new file mode 100644
index 0000000000000..72c7b7ec41c28
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
@@ -0,0 +1,13 @@
+diff -up chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn.me chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn
+--- chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn.me	2023-11-26 16:14:15.364064126 +0100
++++ chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn	2023-11-26 16:41:16.877321990 +0100
+@@ -21,6 +21,9 @@ if (use_atk) {
+     minor = atspi_version[1]
+     micro = atspi_version[2]
+ 
++    # gn workaround for the error: Assignment had no effect
++    print("ATSPI Version: $major.$minor.$micro")
++
+     # ATSPI 2.49.90 now defines these for us and it's an error for us to
+     # redefine them on the compiler command line.
+     # See ATSPI 927344a34cd5bf81fc64da4968241735ecb4f03b
diff --git a/srcpkgs/chromium/patches/chromium-119-missing-header-files.patch b/srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
similarity index 97%
rename from srcpkgs/chromium/patches/chromium-119-missing-header-files.patch
rename to srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
index a2542ef420eaf..44f867475b218 100644
--- a/srcpkgs/chromium/patches/chromium-119-missing-header-files.patch
+++ b/srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
@@ -131,17 +131,6 @@ diff -up chromium-109.0.5414.74/third_party/swiftshader/src/System/LRUCache.hpp.
  #include <cstddef>
  #include <functional>
  #include <unordered_set>
-diff -up chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
---- chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me	2023-01-17 15:40:23.854386206 +0100
-+++ chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h	2023-01-17 16:58:19.397862885 +0100
-@@ -2388,6 +2388,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeV
- #ifdef VMA_IMPLEMENTATION
- #undef VMA_IMPLEMENTATION
- 
-+#include <cstdio>
- #include <cstdint>
- #include <cstdlib>
- #include <cstring>
 diff -up chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h
 --- chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me	2023-01-17 18:08:25.745491353 +0100
 +++ chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h	2023-01-17 18:08:35.777667632 +0100
diff --git a/srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch b/srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
similarity index 67%
rename from srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch
rename to srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
index a16c979c37f1c..b1d987adeff8d 100644
--- a/srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch
+++ b/srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
@@ -1,6 +1,25 @@
-diff -up chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constructor chromium-119.0.6045.59/base/trace_event/trace_log.cc
---- chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constructor	2023-10-26 18:16:51.000000000 +0200
-+++ chromium-119.0.6045.59/base/trace_event/trace_log.cc	2023-10-30 16:51:02.270151487 +0100
+diff -up chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc.no_matching_constructor chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc
+--- chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc.no_matching_constructor	2023-11-29 22:39:40.000000000 +0100
++++ chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc	2023-12-03 17:31:25.748420189 +0100
+@@ -218,13 +218,13 @@ PersistentSparseHistogramDataManager::Lo
+     // The sample-record could be for any sparse histogram. Add the reference
+     // to the appropriate collection for later use.
+     if (found_id == match_id) {
+-      found_records.emplace_back(ref, value);
++      found_records.emplace_back() = {ref, value};
+       found = true;
+     } else {
+       std::vector<ReferenceAndSample>* samples =
+           GetSampleMapRecordsWhileLocked(found_id);
+       CHECK(samples);
+-      samples->emplace_back(ref, value);
++      samples->emplace_back() = {ref, value};
+     }
+   }
+ 
+diff -up chromium-120.0.6099.56/base/trace_event/trace_log.cc.no_matching_constructor chromium-120.0.6099.56/base/trace_event/trace_log.cc
+--- chromium-120.0.6099.56/base/trace_event/trace_log.cc.no_matching_constructor	2023-11-29 22:39:40.000000000 +0100
++++ chromium-120.0.6099.56/base/trace_event/trace_log.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -2191,8 +2191,8 @@ void TraceLog::SetTraceBufferForTesting(
  #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
  void TraceLog::OnSetup(const perfetto::DataSourceBase::SetupArgs& args) {
@@ -12,9 +31,9 @@ diff -up chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constr
  }
  
  void TraceLog::OnStart(const perfetto::DataSourceBase::StartArgs&) {
-diff -up chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc
---- chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor	2023-10-26 18:16:57.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc	2023-10-30 16:51:02.269151462 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc
+--- chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor	2023-11-29 22:39:47.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -226,8 +226,8 @@ void OneTimePermissionProvider::OnSuspen
  
        while (rule_iterator && rule_iterator->HasNext()) {
@@ -37,9 +56,9 @@ diff -up chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permiss
        permissions::PermissionUmaUtil::RecordOneTimePermissionEvent(
            content_setting_type, trigger_event);
      }
-diff -up chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc
---- chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor	2023-10-26 18:16:57.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc	2023-10-30 16:51:02.267151412 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc
+--- chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor	2023-11-29 22:39:48.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -67,8 +67,8 @@ base::flat_map<std::string, SAMLProfileA
    // TODO(crbug.com/1445072): Add actual domains with attribute names.
    profile_attributes->insert(std::make_pair(
@@ -51,9 +70,9 @@ diff -up chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/pro
  
    // Extract domains and attributes from the command line switch.
    const base::CommandLine& command_line =
-diff -up chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
---- chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor	2023-10-26 18:17:00.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc	2023-10-30 16:51:02.262151288 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor	2023-11-29 22:39:52.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -474,10 +474,10 @@ void ChromeOmniboxClient::OnAutocomplete
                alternative_nav_match);
  
@@ -67,9 +86,117 @@ diff -up chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.
  
    if (browser_) {
      auto navigation = chrome::OpenCurrentURL(browser_);
-diff -up chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matching_constructor chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc
---- chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matching_constructor	2023-10-26 18:17:01.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc	2023-10-30 16:51:02.268151437 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc.no_matching_constructor	2023-11-29 22:39:52.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -148,8 +148,8 @@ SafetyHubMenuNotificationService::GetNot
+   // The information related to showing the notification needs to be persisted
+   // as well.
+   SaveNotificationsToPrefs();
+-  return MenuNotificationEntry(notification_to_show->GetNotificationCommandId(),
+-                               notification_to_show->GetNotificationString());
++  return MenuNotificationEntry{notification_to_show->GetNotificationCommandId(),
++                               notification_to_show->GetNotificationString()};
+ }
+ 
+ absl::optional<ResultMap>
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc	2023-12-03 17:31:25.749420208 +0100
+@@ -55,12 +55,12 @@ std::vector<EmbeddedPermissionPromptAskV
+ EmbeddedPermissionPromptAskView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
++        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+   }
+-  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
+-                       ButtonType::kAllow, ui::ButtonStyle::kTonal);
++  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
++                       ButtonType::kAllow, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h	2023-12-03 17:31:25.750420227 +0100
+@@ -86,6 +86,7 @@ class EmbeddedPermissionPromptBaseView :
+   struct RequestLineConfiguration {
+     const raw_ptr<const gfx::VectorIcon> icon;
+     std::u16string message;
++    RequestLineConfiguration(auto i, auto m) : icon(i), message(m) { }
+   };
+ 
+   struct ButtonConfiguration {
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -48,8 +48,8 @@ EmbeddedPermissionPromptPolicyView::GetR
+ std::vector<EmbeddedPermissionPromptPolicyView::ButtonConfiguration>
+ EmbeddedPermissionPromptPolicyView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
+-                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal);
++  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
++                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -63,18 +63,18 @@ EmbeddedPermissionPromptPreviouslyDenied
+ std::vector<EmbeddedPermissionPromptPreviouslyDeniedView::ButtonConfiguration>
+ EmbeddedPermissionPromptPreviouslyDeniedView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_NOT_ALLOWING),
+-      ButtonType::kContinueNotAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kContinueNotAllowing, ui::ButtonStyle::kTonal};
+ 
+   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
++        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+   } else {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllow, ui::ButtonStyle::kTonal);
++        ButtonType::kAllow, ui::ButtonStyle::kTonal};
+   }
+   return buttons;
+ }
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -57,13 +57,13 @@ EmbeddedPermissionPromptPreviouslyGrante
+ std::vector<EmbeddedPermissionPromptPreviouslyGrantedView::ButtonConfiguration>
+ EmbeddedPermissionPromptPreviouslyGrantedView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_ALLOWING),
+-      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal};
+ 
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_STOP_ALLOWING),
+-      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc.no_matching_constructor chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc
+--- chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc.no_matching_constructor	2023-11-29 22:39:54.000000000 +0100
++++ chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc	2023-12-03 17:31:25.750420227 +0100
 @@ -346,7 +346,7 @@ Status ParseMobileEmulation(const base::
                          "'version' field of type string");
          }
@@ -88,10 +215,10 @@ diff -up chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matc
        }
  
        client_hints.full_version_list = std::move(full_version_list);
-diff -up chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc
---- chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor	2023-10-30 16:51:02.273151562 +0100
-+++ chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc	2023-10-30 17:41:12.685887538 +0100
-@@ -195,9 +195,9 @@ class ContactInfoProfileSetter {
+diff -up chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc
+--- chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor	2023-11-29 22:39:57.000000000 +0100
++++ chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -197,9 +197,9 @@ class ContactInfoProfileSetter {
        CHECK(observations.empty());
        for (const sync_pb::ContactInfoSpecifics::Observation& proto_observation :
             metadata.observations()) {
@@ -103,10 +230,38 @@ diff -up chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sy
        }
      }
    }
-diff -up chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
---- chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc	2023-10-30 16:51:02.260151238 +0100
-@@ -1530,7 +1530,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOut
+diff -up chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc.no_matching_constructor chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc
+--- chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc.no_matching_constructor	2023-11-29 22:39:57.000000000 +0100
++++ chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -1763,10 +1763,10 @@ std::unique_ptr<AutofillProfile> Autofil
+     }
+ 
+     base::span<const uint8_t> observations_data = s.ColumnBlob(3);
+-    field_type_values.emplace_back(
++    field_type_values.emplace_back() = {
+         type, s.ColumnString16(1), s.ColumnInt(2),
+         std::vector<uint8_t>(observations_data.begin(),
+-                             observations_data.end()));
++                             observations_data.end())};
+ 
+     if (type == ADDRESS_HOME_COUNTRY) {
+       country_code = base::UTF16ToUTF8(s.ColumnString16(1));
+diff -up chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc.no_matching_constructor chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc
+--- chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc.no_matching_constructor	2023-11-29 22:39:58.000000000 +0100
++++ chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -630,7 +630,7 @@ void PasswordManager::OnUserModifiedNonP
+   // |driver| might be empty on iOS or in tests.
+   int driver_id = driver ? driver->GetId() : 0;
+   possible_usernames_.Put(
+-      PossibleUsernameFieldIdentifier(driver_id, renderer_id),
++      PossibleUsernameFieldIdentifier{driver_id, renderer_id},
+       PossibleUsernameData(GetSignonRealm(driver->GetLastCommittedURL()),
+                            renderer_id, value, base::Time::Now(), driver_id,
+                            autocomplete_attribute_has_username, is_likely_otp));
+diff -up chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
+--- chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -1567,7 +1567,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOut
  
        // Issue readbacks from the surfaces:
        for (size_t i = 0; i < CopyOutputResult::kNV12MaxPlanes; ++i) {
@@ -115,10 +270,10 @@ diff -up chromium-119.0.6045.59/components/viz/service/display_embedder/skia_out
          SkImageInfo dst_info = SkImageInfo::Make(
              size, (i == 0) ? kAlpha_8_SkColorType : kR8G8_unorm_SkColorType,
              kUnpremul_SkAlphaType);
-diff -up chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matching_constructor chromium-119.0.6045.59/content/browser/download/save_package.cc
---- chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/content/browser/download/save_package.cc	2023-10-30 16:51:02.271151512 +0100
-@@ -769,8 +769,8 @@ void SavePackage::Finish() {
+diff -up chromium-120.0.6099.56/content/browser/download/save_package.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/download/save_package.cc
+--- chromium-120.0.6099.56/content/browser/download/save_package.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/download/save_package.cc	2023-12-03 17:31:25.752420265 +0100
+@@ -767,8 +767,8 @@ void SavePackage::Finish() {
    if (download_) {
      std::vector<download::DownloadSaveItemData::ItemInfo> files;
      for (auto& item : saved_success_items_) {
@@ -129,52 +284,76 @@ diff -up chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matc
      }
      download::DownloadSaveItemData::AttachItemData(download_, std::move(files));
    }
-diff -up chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc
---- chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc	2023-10-30 17:38:09.351389984 +0100
-@@ -8567,7 +8567,7 @@ void RenderFrameHostImpl::SendFencedFram
+diff -up chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc
+--- chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc	2023-12-03 17:31:25.752420265 +0100
+@@ -3002,10 +3002,10 @@ DoGetKAnonymityData(sql::Database& db,
+ 
+   std::vector<StorageInterestGroup::KAnonymityData> k_anon_data;
+   while (interest_group_kanon_query.Step()) {
+-    k_anon_data.emplace_back(
++    k_anon_data.emplace_back() = {
+         /*key=*/interest_group_kanon_query.ColumnString(0),
+         /*is_k_anonymous=*/interest_group_kanon_query.ColumnBool(1),
+-        /*last_updated=*/interest_group_kanon_query.ColumnTime(2));
++        /*last_updated=*/interest_group_kanon_query.ColumnTime(2)};
+   }
+   if (!interest_group_kanon_query.Succeeded()) {
+     return absl::nullopt;
+diff -up chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc
+--- chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc	2023-12-03 20:49:28.059042672 +0100
+@@ -8685,7 +8685,7 @@ void RenderFrameHostImpl::SendFencedFram
    for (const blink::FencedFrame::ReportingDestination& destination :
         destinations) {
      SendFencedFrameReportingBeaconInternal(
 -        DestinationEnumEvent(event_type, event_data), destination,
 +        DestinationEnumEvent{event_type, event_data}, destination,
-         /*from_renderer=*/true, attribution_reporting_runtime_features,
-         GetFrameTreeNodeId());
+         /*from_renderer=*/true, attribution_reporting_runtime_features);
    }
-@@ -8603,7 +8603,7 @@ void RenderFrameHostImpl::SendFencedFram
+ }
+@@ -8720,7 +8720,7 @@ void RenderFrameHostImpl::SendFencedFram
    }
  
    SendFencedFrameReportingBeaconInternal(
 -      DestinationURLEvent(destination_url),
 +      DestinationURLEvent{destination_url},
        blink::FencedFrame::ReportingDestination::kBuyer,
-       /*from_renderer=*/true, attribution_reporting_runtime_features,
-       GetFrameTreeNodeId());
-@@ -8703,8 +8703,8 @@ void RenderFrameHostImpl::MaybeSendFence
+       /*from_renderer=*/true, attribution_reporting_runtime_features);
+ }
+@@ -8820,7 +8820,7 @@ void RenderFrameHostImpl::MaybeSendFence
          data = info->data;
        }
        initiator_rfh->SendFencedFrameReportingBeaconInternal(
--          DestinationEnumEvent(blink::kFencedFrameTopNavigationBeaconType,
--                               data),
-+          DestinationEnumEvent{blink::kFencedFrameTopNavigationBeaconType,
-+                               data},
-           destination,
+-          AutomaticBeaconEvent(event_type, data), destination,
++          AutomaticBeaconEvent{event_type, data}, destination,
            /*from_renderer=*/false, attribution_reporting_features,
-           GetFrameTreeNodeId(), navigation_request.GetNavigationId());
-@@ -8717,8 +8717,8 @@ void RenderFrameHostImpl::MaybeSendFence
+           navigation_request.GetNavigationId());
+     }
+@@ -8832,7 +8832,7 @@ void RenderFrameHostImpl::MaybeSendFence
      for (blink::FencedFrame::ReportingDestination destination :
           info->destinations) {
        initiator_rfh->SendFencedFrameReportingBeaconInternal(
--          DestinationEnumEvent(blink::kFencedFrameTopNavigationBeaconType,
--                               info->data),
-+          DestinationEnumEvent{blink::kFencedFrameTopNavigationBeaconType,
-+                               info->data},
-           destination,
+-          AutomaticBeaconEvent(event_type, info->data), destination,
++          AutomaticBeaconEvent{event_type, info->data}, destination,
            /*from_renderer=*/false, info->attribution_reporting_runtime_features,
-           GetFrameTreeNodeId(), navigation_request.GetNavigationId());
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h
---- chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor	2023-10-26 18:17:24.000000000 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h	2023-10-30 16:51:02.262151288 +0100
+           navigation_request.GetNavigationId());
+     }
+diff -up chromium-120.0.6099.56/net/dns/host_resolver_cache.cc.no_matching_constructor chromium-120.0.6099.56/net/dns/host_resolver_cache.cc
+--- chromium-120.0.6099.56/net/dns/host_resolver_cache.cc.no_matching_constructor	2023-11-29 22:40:07.000000000 +0100
++++ chromium-120.0.6099.56/net/dns/host_resolver_cache.cc	2023-12-03 17:31:25.754420303 +0100
+@@ -368,7 +368,7 @@ void HostResolverCache::Set(
+ 
+   std::string domain_name = result->domain_name();
+   entries_.emplace(
+-      Key(std::move(domain_name), network_anonymization_key),
++      Key{std::move(domain_name), network_anonymization_key},
+       Entry(std::move(result), source, secure, staleness_generation));
+ 
+   if (entries_.size() > max_entries_) {
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h
+--- chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor	2023-11-29 22:40:12.000000000 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h	2023-12-03 17:31:25.754420303 +0100
 @@ -96,7 +96,7 @@ class PLATFORM_EXPORT FontPalette : publ
        Color::ColorSpace color_interpolation_space,
        absl::optional<Color::HueInterpolationMethod> hue_interpolation_method) {
@@ -193,9 +372,9 @@ diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_p
    }
  
    double GetAlphaMultiplier() const {
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
---- chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor	2023-10-26 18:17:24.000000000 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc	2023-10-30 16:51:02.261151263 +0100
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
+--- chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor	2023-11-29 22:40:12.000000000 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc	2023-12-03 17:31:25.755420323 +0100
 @@ -31,7 +31,7 @@ Vector<FontPalette::FontPaletteOverride>
          color_interpolation_space, hue_interpolation_method, start_color,
          end_color, percentage, alpha_multiplier);
@@ -205,113 +384,22 @@ diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palett
      result_color_records.push_back(result_color_record);
    }
    return result_color_records;
-diff -up chromium-119.0.6045.59/ui/gtk/gtk_ui.cc.no_matching_constructor chromium-119.0.6045.59/ui/gtk/gtk_ui.cc
---- chromium-119.0.6045.59/ui/gtk/gtk_ui.cc.no_matching_constructor	2023-10-26 18:18:14.000000000 +0200
-+++ chromium-119.0.6045.59/ui/gtk/gtk_ui.cc	2023-10-30 16:51:02.272151537 +0100
-@@ -993,11 +993,11 @@ ui::DisplayConfig GtkUi::GetDisplayConfi
-     GdkRectangle geometry;
-     gdk_monitor_get_geometry(monitor, &geometry);
-     int monitor_scale = std::max(1, gdk_monitor_get_scale_factor(monitor));
--    config.display_geometries.emplace_back(
-+    config.display_geometries.emplace_back() = {
-         gfx::Rect(monitor_scale * geometry.x, monitor_scale * geometry.y,
-                   monitor_scale * geometry.width,
-                   monitor_scale * geometry.height),
--        monitor_scale * font_scale);
-+        static_cast<float>(monitor_scale * font_scale)};
-   }
-   return config;
- }
-diff -up chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc.me chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc
---- chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc.me	2023-10-31 18:14:49.275728099 +0100
-+++ chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc	2023-10-31 18:19:54.599223239 +0100
-@@ -221,13 +221,13 @@ PersistentSparseHistogramDataManager::Lo
-     // The sample-record could be for any sparse histogram. Add the reference
-     // to the appropriate collection for later use.
-     if (found_id == match_id) {
--      found_records.emplace_back(ref, value);
-+      found_records.emplace_back() = {ref, value};
-       found = true;
+diff -up chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp.no_matching_constructor chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp
+--- chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp.no_matching_constructor	2023-11-29 22:41:46.000000000 +0100
++++ chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp	2023-12-03 17:31:25.756420342 +0100
+@@ -491,7 +491,7 @@ void CPDF_RenderStatus::ProcessClipPath(
      } else {
-       std::vector<ReferenceAndSample>* samples =
-           GetSampleMapRecordsWhileLocked(found_id);
-       CHECK(samples);
--      samples->emplace_back(ref, value);
-+      samples->emplace_back() = {ref, value};
+       m_pDevice->SetClip_PathFill(
+           *pPath, &mtObj2Device,
+-          CFX_FillRenderOptions(ClipPath.GetClipType(i)));
++          CFX_FillRenderOptions{ClipPath.GetClipType(i)});
      }
    }
  
-diff -up chromium-119.0.6045.59/net/dns/host_resolver_cache.cc.me chromium-119.0.6045.59/net/dns/host_resolver_cache.cc
---- chromium-119.0.6045.59/net/dns/host_resolver_cache.cc.me	2023-10-31 20:48:19.153868338 +0100
-+++ chromium-119.0.6045.59/net/dns/host_resolver_cache.cc	2023-10-31 20:51:37.634526549 +0100
-@@ -368,7 +368,7 @@ void HostResolverCache::Set(
- 
-   std::string domain_name = result->domain_name();
-   entries_.emplace(
--      Key(std::move(domain_name), network_anonymization_key),
-+      Key{std::move(domain_name), network_anonymization_key},
-       Entry(std::move(result), source, secure, staleness_generation));
- 
-   if (entries_.size() > max_entries_) {
-diff -up chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc.me chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc
---- chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc.me	2023-10-31 22:32:58.995997897 +0100
-+++ chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc	2023-10-31 22:33:28.290520601 +0100
-@@ -1733,10 +1733,10 @@ std::unique_ptr<AutofillProfile> Autofil
-     }
- 
-     base::span<const uint8_t> observations_data = s.ColumnBlob(3);
--    field_type_values.emplace_back(
-+    field_type_values.emplace_back() = {
-         type, s.ColumnString16(1), s.ColumnInt(2),
-         std::vector<uint8_t>(observations_data.begin(),
--                             observations_data.end()));
-+                             observations_data.end())};
- 
-     if (type == ADDRESS_HOME_COUNTRY) {
-       country_code = base::UTF16ToUTF8(s.ColumnString16(1));
-diff -up chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc.than chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc
---- chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc.than	2023-10-31 22:41:22.850233005 +0100
-+++ chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc	2023-10-31 22:42:37.276931933 +0100
-@@ -625,7 +625,7 @@ void PasswordManager::OnUserModifiedNonP
-   // |driver| might be empty on iOS or in tests.
-   int driver_id = driver ? driver->GetId() : 0;
-   possible_usernames_.Put(
--      PossibleUsernameFieldIdentifier(driver_id, renderer_id),
-+      PossibleUsernameFieldIdentifier{driver_id, renderer_id},
-       PossibleUsernameData(GetSignonRealm(driver->GetLastCommittedURL()),
-                            renderer_id, value, base::Time::Now(), driver_id,
-                            autocomplete_attribute_has_username, is_likely_otp));
-diff -up chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc.than chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc
---- chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc.than	2023-10-31 23:31:08.438267908 +0100
-+++ chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc	2023-10-31 23:32:08.979358711 +0100
-@@ -2854,10 +2854,10 @@ DoGetKAnonymityData(sql::Database& db,
- 
-   std::vector<StorageInterestGroup::KAnonymityData> k_anon_data;
-   while (interest_group_kanon_query.Step()) {
--    k_anon_data.emplace_back(
-+    k_anon_data.emplace_back() = {
-         /*key=*/interest_group_kanon_query.ColumnString(0),
-         /*is_k_anonymous=*/interest_group_kanon_query.ColumnBool(1),
--        /*last_updated=*/interest_group_kanon_query.ColumnTime(2));
-+        /*last_updated=*/interest_group_kanon_query.ColumnTime(2)};
-   }
-   if (!interest_group_kanon_query.Succeeded()) {
-     return absl::nullopt;
-diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc.than chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc
---- chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc.than	2023-11-01 11:19:42.745395797 +0100
-+++ chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc	2023-11-01 11:22:16.670920679 +0100
-@@ -1881,7 +1881,7 @@ void FederatedAuthRequestImpl::ShowError
-       base::BindOnce(&FederatedAuthRequestImpl::CompleteRequestWithError,
-                      weak_ptr_factory_.GetWeakPtr()));
-   absl::optional<TokenError> token_error =
--      error ? absl::make_optional<TokenError>(error->code, error->url)
-+      error ? absl::make_optional<TokenError>({error->code, error->url})
-             : absl::nullopt;
- 
-   // TODO(crbug.com/1485710): Refactor IdentityCredentialTokenError
---- chromium-119.0.6045.59/ui/base/wayland/color_manager_util.h.no_matching_constructor	2023-10-26 18:18:14.000000000 +0200
-+++ chromium-119.0.6045.59/ui/base/wayland/color_manager_util.h	2023-11-01 17:29:54.269820415 +0100
-@@ -52,53 +52,53 @@
+diff -up chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h.no_matching_constructor chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h
+--- chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h.no_matching_constructor	2023-11-29 22:40:44.000000000 +0100
++++ chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h	2023-12-03 17:31:25.755420323 +0100
+@@ -52,53 +52,53 @@ constexpr auto kChromaticityMap = base::
      zcr_color_manager_v1_chromaticity_names,
      PrimaryVersion>(
      {{ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT601_525_LINE,
@@ -391,7 +479,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  
  // A map from the zcr_color_manager_v1 eotf_names enum values
  // representing well-known EOTFs, to their equivalent TransferIDs.
-@@ -107,68 +107,68 @@
+@@ -107,68 +107,68 @@ constexpr auto kEotfMap = base::MakeFixe
      zcr_color_manager_v1_eotf_names,
      TransferVersion>({
      {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -498,7 +586,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  });
  
  // A map from the SDR zcr_color_manager_v1 eotf_names enum values
-@@ -177,18 +177,18 @@
+@@ -177,18 +177,18 @@ constexpr auto kEotfMap = base::MakeFixe
  constexpr auto kTransferMap =
      base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>({
          {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -524,7 +612,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
      });
  
  // A map from the HDR zcr_color_manager_v1 eotf_names enum values
-@@ -197,70 +197,70 @@
+@@ -197,70 +197,70 @@ constexpr auto kTransferMap =
  constexpr auto kHDRTransferMap =
      base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>(
          {{ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -628,76 +716,27 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  
  zcr_color_manager_v1_chromaticity_names ToColorManagerChromaticity(
      gfx::ColorSpace::PrimaryID primaryID,
-@@ -283,4 +283,4 @@
+@@ -283,4 +283,4 @@ zcr_color_manager_v1_eotf_names ToColorM
  
  }  // namespace ui::wayland
  
 -#endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
 \ Kein Zeilenumbruch am Dateiende.
 +#endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.me chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.me	2023-11-01 20:46:15.997861278 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc	2023-11-01 20:49:33.603371680 +0100
-@@ -58,13 +58,13 @@ EmbeddedPermissionPromptPreviouslyGrante
- std::vector<EmbeddedPermissionPromptPreviouslyGrantedView::ButtonConfiguration>
- EmbeddedPermissionPromptPreviouslyGrantedView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
--  buttons.emplace_back(
-+  buttons.emplace_back() = {
-       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_ALLOWING),
--      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal);
-+      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal};
- 
--  buttons.emplace_back(
-+  buttons.emplace_back() = {
-       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_STOP_ALLOWING),
--      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal);
-+      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal};
-   return buttons;
- }
- 
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.than chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.than	2023-11-01 20:52:29.005464494 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc	2023-11-01 21:14:12.741859604 +0100
-@@ -56,12 +56,12 @@ std::vector<EmbeddedPermissionPromptAskV
- EmbeddedPermissionPromptAskView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
-   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
--    buttons.emplace_back(
-+    buttons.emplace_back() = {
-         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
--        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
-+        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+diff -up chromium-120.0.6099.56/ui/gtk/gtk_ui.cc.no_matching_constructor chromium-120.0.6099.56/ui/gtk/gtk_ui.cc
+--- chromium-120.0.6099.56/ui/gtk/gtk_ui.cc.no_matching_constructor	2023-11-29 22:40:44.000000000 +0100
++++ chromium-120.0.6099.56/ui/gtk/gtk_ui.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -1013,11 +1013,11 @@ ui::DisplayConfig GtkUi::GetDisplayConfi
+     GdkRectangle geometry;
+     gdk_monitor_get_geometry(monitor, &geometry);
+     int monitor_scale = std::max(1, gdk_monitor_get_scale_factor(monitor));
+-    config.display_geometries.emplace_back(
++    config.display_geometries.emplace_back() = {
+         gfx::Rect(monitor_scale * geometry.x, monitor_scale * geometry.y,
+                   monitor_scale * geometry.width,
+                   monitor_scale * geometry.height),
+-        monitor_scale * font_scale);
++        static_cast<float>(monitor_scale * font_scale)};
    }
--  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
--                       ButtonType::kAllow, ui::ButtonStyle::kTonal);
-+  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
-+                       ButtonType::kAllow, ui::ButtonStyle::kTonal};
-   return buttons;
- }
- 
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.me chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.me	2023-11-01 21:22:02.222646903 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h	2023-11-01 21:19:58.769619393 +0100
-@@ -72,6 +72,7 @@ class EmbeddedPermissionPromptBaseView :
-   struct RequestLineConfiguration {
-     const raw_ptr<const gfx::VectorIcon> icon;
-     std::u16string message;
-+    RequestLineConfiguration(auto i, auto m) : icon(i), message(m) { }
-   };
- 
-   struct ButtonConfiguration {
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.than chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.than	2023-11-01 21:25:31.118626473 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc	2023-11-01 21:30:06.383340274 +0100
-@@ -48,8 +48,8 @@ EmbeddedPermissionPromptPolicyView::GetR
- std::vector<EmbeddedPermissionPromptPolicyView::ButtonConfiguration>
- EmbeddedPermissionPromptPolicyView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
--  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
--                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal);
-+  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
-+                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal};
-   return buttons;
+   return config;
  }
- 
diff --git a/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch b/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
new file mode 100644
index 0000000000000..e80ed715aaf29
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
@@ -0,0 +1,28 @@
+diff -up chromium-120.0.6099.35/build/config/compiler/BUILD.gn.than chromium-120.0.6099.35/build/config/compiler/BUILD.gn
+--- chromium-120.0.6099.35/build/config/compiler/BUILD.gn.than	2023-11-26 17:02:25.647022746 +0100
++++ chromium-120.0.6099.35/build/config/compiler/BUILD.gn	2023-11-26 17:15:58.025585358 +0100
+@@ -616,24 +616,6 @@ config("compiler") {
+       }
+     }
+ 
+-    # TODO(crbug.com/1488374): This causes binary size growth and potentially
+-    # other problems.
+-    # TODO(crbug.com/1491036): This isn't supported by Cronet's mainline llvm version.
+-    if (default_toolchain != "//build/toolchain/cros:target" &&
+-        !llvm_android_mainline) {
+-      cflags += [
+-        "-mllvm",
+-        "-split-threshold-for-reg-with-hint=0",
+-      ]
+-      if (use_thin_lto && is_a_target_toolchain) {
+-        if (is_win) {
+-          ldflags += [ "-mllvm:-split-threshold-for-reg-with-hint=0" ]
+-        } else {
+-          ldflags += [ "-Wl,-mllvm,-split-threshold-for-reg-with-hint=0" ]
+-        }
+-      }
+-    }
+-
+     # TODO(crbug.com/1235145): Investigate why/if this should be needed.
+     if (is_win) {
+       cflags += [ "/clang:-ffp-contract=off" ]
diff --git a/srcpkgs/chromium/patches/chromium-117-typename.patch b/srcpkgs/chromium/patches/chromium-120-typename.patch
similarity index 83%
rename from srcpkgs/chromium/patches/chromium-117-typename.patch
rename to srcpkgs/chromium/patches/chromium-120-typename.patch
index d3b00e7323603..9a2d878b12b54 100644
--- a/srcpkgs/chromium/patches/chromium-117-typename.patch
+++ b/srcpkgs/chromium/patches/chromium-120-typename.patch
@@ -1,3 +1,23 @@
+--- chromium-120.0.6099.56/base/containers/map_util.h.me	2023-12-02 19:00:19.696801563 +0100
++++ chromium-120.0.6099.56/base/containers/map_util.h	2023-12-02 19:00:47.049337547 +0100
+@@ -42,7 +42,7 @@
+ template <typename Map,
+           typename Key,
+           typename MappedElementType =
+-              std::pointer_traits<internal::MappedType<Map>>::element_type>
++              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
+ constexpr const MappedElementType* FindPtrOrNull(const Map& map,
+                                                  const Key& key) {
+   auto it = map.find(key);
+@@ -58,7 +58,7 @@
+ template <typename Map,
+           typename Key,
+           typename MappedElementType =
+-              std::pointer_traits<internal::MappedType<Map>>::element_type>
++              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
+ constexpr MappedElementType* FindPtrOrNull(Map& map, const Key& key) {
+   auto it = map.find(key);
+   return it != map.end() ? std::to_address(it->second) : nullptr;
 diff -up chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc.me chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc
 --- chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc.me	2023-06-17 14:50:56.342591702 +0200
 +++ chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc	2023-06-17 14:57:48.024377375 +0200
@@ -162,3 +182,24 @@ diff -up chromium-117.0.5938.62/components/supervised_user/core/browser/proto_fe
  
    // Remove fetcher under key from requests_in_flight_.
    void Remove(KeyType key);
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h.me chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h
+--- chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h.me	2023-12-04 00:29:35.197209538 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h	2023-12-04 00:30:24.436233249 +0100
+@@ -220,7 +220,7 @@ class PairAsyncIterable {
+  private:
+   virtual IterationSource* CreateIterationSource(
+       ScriptState* script_state,
+-      IterationSource::Kind kind,
++      typename IterationSource::Kind kind,
+       ExceptionState& exception_state) = 0;
+ };
+ 
+@@ -262,7 +262,7 @@ class ValueAsyncIterable {
+  private:
+   virtual IterationSource* CreateIterationSource(
+       ScriptState* script_state,
+-      IterationSource::Kind kind,
++      typename IterationSource::Kind kind,
+       ExceptionState& exception_state) = 0;
+ };
+ 
diff --git a/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch b/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
new file mode 100644
index 0000000000000..b06e29f29047a
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
@@ -0,0 +1,51 @@
+diff -up chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc
+--- chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:37.000000000 +0200
++++ chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc	2023-06-17 16:53:20.216628557 +0200
+@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui
+ void CdmPromiseAdapter::Clear(ClearReason reason) {
+   // Reject all outstanding promises.
+   DCHECK(thread_checker_.CalledOnValidThread());
+-  for (auto& [promise_id, promise] : promises_) {
++  for (auto& [p_i, p_e] : promises_) {
++    auto& promise_id = p_i;
++    auto& promise = p_e;
+     TRACE_EVENT_NESTABLE_ASYNC_END1(
+         "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id),
+         "status", "cleared");
+diff -up chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc
+--- chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me	2023-06-19 08:04:02.287072722 +0200
++++ chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc	2023-06-19 08:18:24.576814950 +0200
+@@ -1393,7 +1393,8 @@ void ServiceWorkerContextWrapper::MaybeP
+     return;
+   }
+ 
+-  auto [document_url, key, callback] = std::move(*request);
++  auto [d_u, key, callback] = std::move(*request);
++  auto document_url = d_u;
+ 
+   DCHECK(document_url.is_valid());
+   TRACE_EVENT1("ServiceWorker",
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc.me chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
+--- chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc.me	2023-12-03 22:17:50.922083200 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc	2023-12-03 22:22:55.437484343 +0100
+@@ -3447,7 +3447,8 @@ void GridLayoutAlgorithm::PlaceGridItems
+   DCHECK(out_row_break_between);
+ 
+   const auto& container_space = ConstraintSpace();
+-  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
++  const auto& [grid_items, l_d, tree_size] = sizing_tree.TreeRootData();
++  const auto& layout_data = l_d;
+ 
+   const auto* cached_layout_subtree = container_space.GetGridLayoutSubtree();
+   const auto container_writing_direction =
+@@ -3611,7 +3612,9 @@ void GridLayoutAlgorithm::PlaceGridItems
+ 
+   // TODO(ikilpatrick): Update |SetHasSeenAllChildren| and early exit if true.
+   const auto& constraint_space = ConstraintSpace();
+-  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
++  const auto& [g_i, l_d, tree_size] = sizing_tree.TreeRootData();
++  const auto& grid_items = g_i;
++  const auto& layout_data = l_d;
+ 
+   const auto* cached_layout_subtree = constraint_space.GetGridLayoutSubtree();
+   const auto container_writing_direction =
diff --git a/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch b/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
index afcdae179850a..b3dd2c33f0f21 100644
--- a/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
+++ b/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
@@ -1,5 +1,5 @@
---- a/base/allocator/partition_allocator/tagging.cc
-+++ b/base/allocator/partition_allocator/tagging.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/tagging.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/tagging.cc
 @@ -28,13 +28,25 @@
  #endif
  #endif
diff --git a/srcpkgs/chromium/patches/musl-no-execinfo.patch b/srcpkgs/chromium/patches/musl-no-execinfo.patch
index fac2b6d190e78..7407f1b9db38a 100644
--- a/srcpkgs/chromium/patches/musl-no-execinfo.patch
+++ b/srcpkgs/chromium/patches/musl-no-execinfo.patch
@@ -83,12 +83,3 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1
  // StackTrace::OutputToStream() is not implemented under uclibc, nor AIX.
  // See https://crbug.com/706728
  
-@@ -156,7 +156,7 @@
- 
- #endif  // !defined(__UCLIBC__) && !defined(_AIX)
- 
--#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID)
-+#if (BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !BUILDFLAG(IS_ANDROID)
- #if !BUILDFLAG(IS_IOS)
- static char* newArray() {
-   // Clang warns about the mismatched new[]/delete if they occur in the same
diff --git a/srcpkgs/chromium/patches/musl-no-mallinfo.patch b/srcpkgs/chromium/patches/musl-no-mallinfo.patch
index cd728ecfb112d..a58ee08a435a0 100644
--- a/srcpkgs/chromium/patches/musl-no-mallinfo.patch
+++ b/srcpkgs/chromium/patches/musl-no-mallinfo.patch
@@ -101,8 +101,8 @@ musl does not implement mallinfo()/mallinfo2()
  
  /* Define to 1 if you have the <malloc.h> header file. */
  #define HAVE_MALLOC_H 1
---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
-+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
 @@ -717,7 +717,7 @@
  
  #endif  // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID)
@@ -112,8 +112,8 @@ musl does not implement mallinfo()/mallinfo2()
  SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW {
    base::SimplePartitionStatsDumper allocator_dumper;
    Allocator()->DumpStats("malloc", true, &allocator_dumper);
---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
-+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
 @@ -24,7 +24,7 @@
  #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
  
diff --git a/srcpkgs/chromium/patches/musl-partition-atfork.patch b/srcpkgs/chromium/patches/musl-partition-atfork.patch
index 2910aa2bbf9b1..35d810055fbb5 100644
--- a/srcpkgs/chromium/patches/musl-partition-atfork.patch
+++ b/srcpkgs/chromium/patches/musl-partition-atfork.patch
@@ -1,5 +1,5 @@
---- a/base/allocator/partition_allocator/partition_root.cc
-+++ b/base/allocator/partition_allocator/partition_root.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc
 @@ -239,7 +239,7 @@
    if (!g_global_init_called.compare_exchange_strong(expected, true))
      return;
diff --git a/srcpkgs/chromium/patches/no-mte.patch b/srcpkgs/chromium/patches/no-mte.patch
deleted file mode 100644
index 56167e1e5c576..0000000000000
--- a/srcpkgs/chromium/patches/no-mte.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/base/allocator/partition_allocator/partition_alloc_config.h
-+++ b/base/allocator/partition_allocator/partition_alloc_config.h
-@@ -153,7 +153,7 @@
-    defined(ARCH_CPU_LITTLE_ENDIAN))
- 
- #define PA_CONFIG_HAS_MEMORY_TAGGING()              \
--  (defined(ARCH_CPU_ARM64) && defined(__clang__) && \
-+  (0 && defined(ARCH_CPU_ARM64) && defined(__clang__) && \
-    !defined(ADDRESS_SANITIZER) &&                   \
-    (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
- 
diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index b023946f3ec7b..d10cfb28144e3 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -1,8 +1,8 @@
 # Template file for 'chromium'
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
-version=119.0.6045.105
-revision=3
+version=120.0.6099.109
+revision=1
 archs="i686* x86_64* aarch64* armv7l*"
 hostmakedepends="
  $(vopt_if clang "clang lld llvm15")
@@ -10,12 +10,12 @@ hostmakedepends="
  libepoxy-devel libevent-devel libglib-devel"
 makedepends="
  alsa-lib-devel libdav1d-devel brotli-devel cups-devel elfutils-devel ffmpeg-devel
- fontconfig-devel freetype-devel gtk+3-devel jsoncpp-devel libXScrnSaver-devel
+ fontconfig-devel freetype-devel gtk+3-devel libXScrnSaver-devel
  libXcomposite-devel libXcursor-devel libXdamage-devel libXi-devel libXrandr-devel
  libavif-devel libcap-devel libcurl-devel libdrm-devel libevent-devel
  libexif-devel libflac-devel libgcrypt-devel libjpeg-turbo-devel libmtp-devel
  libpng-devel libva-devel libwebp-devel libxml2-devel libxshmfence-devel
- libxslt-devel woff2-devel minizip-devel mit-krb5-devel nss-devel opus-devel
+ libxslt-devel minizip-devel mit-krb5-devel nss-devel opus-devel
  pciutils-devel snappy-devel speech-dispatcher-devel speex-devel
  xcb-proto zlib-devel libaom-devel libffi-devel libevdev-devel
  $(vopt_if pipewire pipewire-devel)
@@ -27,7 +27,7 @@ maintainer="Duncaen <duncaen@voidlinux.org>"
 license="BSD-3-Clause"
 homepage="https://www.chromium.org/"
 distfiles="https://commondatastorage.googleapis.com/chromium-browser-official/${pkgname}-${version}.tar.xz"
-checksum=73cb8c39e928f8c627d747d37a3b020f08913ef5508f893758d70bdbd545dbcf
+checksum=87c00c525ee07c2233b78dbece1496b697f686244a67fac2c71e4a30bd96849b
 
 lib32disabled=yes
 
@@ -52,7 +52,7 @@ if [ "$CROSS_BUILD" ]; then
 	 $(vopt_if pipewire pipewire-devel) ffmpeg-devel opus-devel pango-devel libva-devel
 	 libcurl-devel snappy-devel libXrandr-devel libXcomposite-devel cups-devel
 	 mit-krb5-devel alsa-lib-devel libXdamage-devel libepoxy-devel libevdev-devel
-	 libavif-devel libaom-devel jsoncpp-devel woff2-devel libdav1d-devel libflac-devel
+	 libavif-devel libaom-devel libdav1d-devel libflac-devel
 	 libdrm-devel libgbm-devel"
 fi
 
@@ -82,6 +82,9 @@ post_patch() {
 	# allow system dependencies in "official builds"
 	vsed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \
 		tools/generate_shim_headers/generate_shim_headers.py
+
+	mkdir -p third_party/node/linux/node-linux-x64/bin
+	ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/
 }
 
 _setup_clang() {
@@ -144,6 +147,8 @@ do_configure() {
 	# use_system_v8=1
 	# bzip2 xdg_utils speex
 	# XXX: harfbuzz-ng use builtin one until system-wide is updated >=3.0.0
+	# libcxx https://github.com/llvm/llvm-project/issues/61705:
+	# snappy
 	system="
 		ffmpeg
 		flac
@@ -157,7 +162,6 @@ do_configure() {
 		libxml
 		libxslt
 		opus
-		snappy
 	"
 
 	# remove build scripts for system provided dependencies - basically does the
@@ -192,7 +196,7 @@ do_configure() {
 		'clang_base_path="/usr"'
 
 		"gold_path=\"${XBPS_CROSS_BASE}/usr/bin/ld.gold\""
-		'use_custom_libcxx=false'
+		'use_custom_libcxx=true' # https://github.com/llvm/llvm-project/issues/61705
 		'use_gold=false'
 
 		'rust_sysroot_absolute="/usr"'
@@ -304,7 +308,6 @@ do_install() {
 	vmkdir usr/lib/chromium/locales
 	vcopy "out/Release/locales/*.pak" usr/lib/chromium/locales
 
-	vinstall ${FILESDIR}/chromium.desktop 644 usr/share/applications
 
 	vinstall out/Release/icudtl.dat 0644 usr/lib/chromium
 
@@ -322,4 +325,14 @@ do_install() {
 	vbin ${FILESDIR}/chromium.sh chromium
 	vlicense LICENSE
 	ln -sf /usr/lib/chromium/chromedriver ${DESTDIR}/usr/bin/chromedriver
+
+	vinstall chrome/installer/linux/common/desktop.template 644 usr/share/applications chromium.desktop
+	vinstall chrome/app/resources/manpage.1.in 644 usr/share/man/man1 chromium.1
+
+	sed -i \
+		-e 's/@@MENUNAME@@/Chromium/g' \
+		-e 's/@@PACKAGE@@/chromium/g' \
+		-e 's/@@USR_BIN_SYMLINK_NAME@@/chromium/g' \
+		${DESTDIR}/usr/share/man/man1/chromium.1 \
+		${DESTDIR}/usr/share/applications/chromium.desktop
 }
diff --git a/srcpkgs/chromium/update b/srcpkgs/chromium/update
index c035a8fe1c3b3..af42867275488 100644
--- a/srcpkgs/chromium/update
+++ b/srcpkgs/chromium/update
@@ -1,2 +1,2 @@
-site='https://omahaproxy.appspot.com/all'
-pattern='linux,stable,\K[^,]*'
+site='https://chromiumdash.appspot.com/fetch_releases?channel=Stable&platform=Linux&num=1&offset=0'
+pattern='"version":\s*"\K[^,]+(?=")'

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PR PATCH] [Updated] chromium: update to 120.0.6099.109.
  2023-12-13 17:44 [PR PATCH] chromium: update to 120.0.6099.109 Duncaen
  2023-12-13 17:59 ` [PR PATCH] [Updated] " Duncaen
@ 2023-12-13 18:06 ` Duncaen
  2023-12-13 18:13 ` Duncaen
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Duncaen @ 2023-12-13 18:06 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 412 bytes --]

There is an updated pull request by Duncaen against master on the void-packages repository

https://github.com/Duncaen/void-packages chromium-120
https://github.com/void-linux/void-packages/pull/47739

chromium: update to 120.0.6099.109.
[ci skip]

* [x] x86_64-glibc
* [ ] x86_64-musl
* [ ] aarch64-musl
* [ ] i686

A patch file from https://github.com/void-linux/void-packages/pull/47739.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-chromium-120-47739.patch --]
[-- Type: text/x-diff, Size: 125190 bytes --]

From 0cf083d96f8257d364d0d5d7a5786d99dc253b21 Mon Sep 17 00:00:00 2001
From: Duncaen <duncaen@voidlinux.org>
Date: Wed, 13 Dec 2023 14:53:36 +0100
Subject: [PATCH] chromium: update to 120.0.6099.109.

---
 srcpkgs/chromium/files/chromium.desktop       | 112 ----
 .../files/musl-patches/libc++-musl.patch      |  12 +
 .../chromium-118-python-3.12-deprecated.patch | 138 -----
 ...karound_clang_bug-structured_binding.patch |  96 ----
 .../patches/chromium-119-constexpr.patch      |  12 -
 ...tVideoDecoder-flag-on-VA-API-devices.patch | 195 -------
 ...-119-nullptr_t-without-namespace-std.patch |  21 -
 ...a-use-separate-bo-to-verify-modifier.patch | 164 ------
 .../chromium-120-arm64-memory_tagging.patch   |  14 +
 ...hromium-120-disable-FFmpegAllowLists.patch |  12 +
 ...ble-GlobalMediaControlsCastStartStop.patch |  14 +
 ...chromium-120-el7-clang-build-failure.patch | 230 ++++++++
 ...ium-120-el7-clang-build-failure.patch.args |   1 +
 ...romium-120-el7-clang-version-warning.patch |  16 +
 .../chromium-120-gn-workaround-atspi.patch    |  13 +
 ...> chromium-120-missing-header-files.patch} |  11 -
 ...hromium-120-no_matching_constructor.patch} | 493 ++++++++++--------
 ...20-split-threshold-for-reg-with-hint.patch |  28 +
 ...name.patch => chromium-120-typename.patch} |  41 ++
 ...karound_clang_bug-structured_binding.patch |  51 ++
 ...x-aarch64-musl-memory-tagging-macros.patch |   4 +-
 .../chromium/patches/musl-no-execinfo.patch   |   9 -
 .../chromium/patches/musl-no-mallinfo.patch   |   8 +-
 .../patches/musl-partition-atfork.patch       |   4 +-
 srcpkgs/chromium/patches/no-mte.patch         |  11 -
 srcpkgs/chromium/template                     |  31 +-
 srcpkgs/chromium/update                       |   4 +-
 27 files changed, 730 insertions(+), 1015 deletions(-)
 delete mode 100644 srcpkgs/chromium/files/chromium.desktop
 create mode 100644 srcpkgs/chromium/files/musl-patches/libc++-musl.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-constexpr.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
 rename srcpkgs/chromium/patches/{chromium-119-missing-header-files.patch => chromium-120-missing-header-files.patch} (97%)
 rename srcpkgs/chromium/patches/{chromium-119-no_matching_constructor.patch => chromium-120-no_matching_constructor.patch} (67%)
 create mode 100644 srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
 rename srcpkgs/chromium/patches/{chromium-117-typename.patch => chromium-120-typename.patch} (83%)
 create mode 100644 srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
 delete mode 100644 srcpkgs/chromium/patches/no-mte.patch

diff --git a/srcpkgs/chromium/files/chromium.desktop b/srcpkgs/chromium/files/chromium.desktop
deleted file mode 100644
index 05788f7135daa..0000000000000
--- a/srcpkgs/chromium/files/chromium.desktop
+++ /dev/null
@@ -1,112 +0,0 @@
-[Desktop Entry]
-Name=Chromium
-# Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
-# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
-GenericName=Web Browser
-GenericName[ar]=متصفح الشبكة
-GenericName[bg]=Уеб браузър
-GenericName[ca]=Navegador web
-GenericName[cs]=WWW prohlížeč
-GenericName[da]=Browser
-GenericName[de]=Web-Browser
-GenericName[el]=Περιηγητής ιστού
-GenericName[en_GB]=Web Browser
-GenericName[es]=Navegador web
-GenericName[et]=Veebibrauser
-GenericName[fi]=WWW-selain
-GenericName[fr]=Navigateur Web
-GenericName[gu]=વેબ બ્રાઉઝર
-GenericName[he]=דפדפן אינטרנט
-GenericName[hi]=वेब ब्राउज़र
-GenericName[hu]=Webböngésző
-GenericName[it]=Browser Web
-GenericName[ja]=ウェブブラウザ
-GenericName[kn]=ಜಾಲ ವೀಕ್ಷಕ
-GenericName[ko]=웹 브라우저
-GenericName[lt]=Žiniatinklio naršyklė
-GenericName[lv]=Tīmekļa pārlūks
-GenericName[ml]=വെബ് ബ്രൌസര്‍
-GenericName[mr]=वेब ब्राऊजर
-GenericName[nb]=Nettleser
-GenericName[nl]=Webbrowser
-GenericName[pl]=Przeglądarka WWW
-GenericName[pt]=Navegador Web
-GenericName[pt_BR]=Navegador da Internet
-GenericName[ro]=Navigator de Internet
-GenericName[ru]=Веб-браузер
-GenericName[sl]=Spletni brskalnik
-GenericName[sv]=Webbläsare
-GenericName[ta]=இணைய உலாவி
-GenericName[th]=เว็บเบราว์เซอร์
-GenericName[tr]=Web Tarayıcı
-GenericName[uk]=Навігатор Тенет
-GenericName[zh_CN]=网页浏览器
-GenericName[zh_HK]=網頁瀏覽器
-GenericName[zh_TW]=網頁瀏覽器
-# Not translated in KDE, from Epiphany 2.26.1-0ubuntu1.
-GenericName[bn]=ওয়েব ব্রাউজার
-GenericName[fil]=Web Browser
-GenericName[hr]=Web preglednik
-GenericName[id]=Browser Web
-GenericName[or]=ଓ୍ବେବ ବ୍ରାଉଜର
-GenericName[sk]=WWW prehliadač
-GenericName[sr]=Интернет прегледник
-GenericName[te]=మహాతల అన్వేషి
-GenericName[vi]=Bộ duyệt Web
-# Gnome and KDE 3 uses Comment.
-Comment=Access the Internet
-Comment[ar]=الدخول إلى الإنترنت
-Comment[bg]=Достъп до интернет
-Comment[bn]=ইন্টারনেটটি অ্যাক্সেস করুন
-Comment[ca]=Accedeix a Internet
-Comment[cs]=Přístup k internetu
-Comment[da]=Få adgang til internettet
-Comment[de]=Internetzugriff
-Comment[el]=Πρόσβαση στο Διαδίκτυο
-Comment[en_GB]=Access the Internet
-Comment[es]=Accede a Internet.
-Comment[et]=Pääs Internetti
-Comment[fi]=Käytä internetiä
-Comment[fil]=I-access ang Internet
-Comment[fr]=Accéder à Internet
-Comment[gu]=ઇંટરનેટ ઍક્સેસ કરો
-Comment[he]=גישה אל האינטרנט
-Comment[hi]=इंटरनेट तक पहुंच स्थापित करें
-Comment[hr]=Pristup Internetu
-Comment[hu]=Internetelérés
-Comment[id]=Akses Internet
-Comment[it]=Accesso a Internet
-Comment[ja]=インターネットにアクセス
-Comment[kn]=ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ
-Comment[ko]=인터넷 연결
-Comment[lt]=Interneto prieiga
-Comment[lv]=Piekļūt internetam
-Comment[ml]=ഇന്റര്‍‌നെറ്റ് ആക്‌സസ് ചെയ്യുക
-Comment[mr]=इंटरनेटमध्ये प्रवेश करा
-Comment[nb]=Gå til Internett
-Comment[nl]=Verbinding maken met internet
-Comment[or]=ଇଣ୍ଟର୍ନେଟ୍ ପ୍ରବେଶ କରନ୍ତୁ
-Comment[pl]=Skorzystaj z internetu
-Comment[pt]=Aceder à Internet
-Comment[pt_BR]=Acessar a internet
-Comment[ro]=Accesaţi Internetul
-Comment[ru]=Доступ в Интернет
-Comment[sk]=Prístup do siete Internet
-Comment[sl]=Dostop do interneta
-Comment[sr]=Приступите Интернету
-Comment[sv]=Gå ut på Internet
-Comment[ta]=இணையத்தை அணுகுதல்
-Comment[te]=ఇంటర్నెట్‌ను ఆక్సెస్ చెయ్యండి
-Comment[th]=เข้าถึงอินเทอร์เน็ต
-Comment[tr]=İnternet'e erişin
-Comment[uk]=Доступ до Інтернету
-Comment[vi]=Truy cập Internet
-Comment[zh_CN]=访问互联网
-Comment[zh_HK]=連線到網際網路
-Comment[zh_TW]=連線到網際網路
-Exec=chromium %U
-Terminal=false
-Icon=chromium
-Type=Application
-Categories=GTK;Network;WebBrowser;
-MimeType=text/html;text/xml;application/xhtml+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
diff --git a/srcpkgs/chromium/files/musl-patches/libc++-musl.patch b/srcpkgs/chromium/files/musl-patches/libc++-musl.patch
new file mode 100644
index 0000000000000..b90a54daa8b49
--- /dev/null
+++ b/srcpkgs/chromium/files/musl-patches/libc++-musl.patch
@@ -0,0 +1,12 @@
+Source: https://git.alpinelinux.org/aports/tree/community/chromium/yes-musl.patch
+--- ./buildtools/third_party/libc++/__config_site.orig
++++ ./buildtools/third_party/libc++/__config_site
+@@ -18,7 +18,7 @@
+ /* #undef _LIBCPP_ABI_FORCE_MICROSOFT */
+ /* #undef _LIBCPP_HAS_NO_THREADS */
+ /* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */
+-/* #undef _LIBCPP_HAS_MUSL_LIBC */
++#define _LIBCPP_HAS_MUSL_LIBC 1
+ /* #undef _LIBCPP_HAS_THREAD_API_PTHREAD */
+ /* #undef _LIBCPP_HAS_THREAD_API_EXTERNAL */
+ /* #undef _LIBCPP_HAS_THREAD_API_WIN32 */
diff --git a/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch b/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
deleted file mode 100644
index 5837ae584117d..0000000000000
--- a/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-diff -up chromium-115.0.5790.102/base/write_build_date_header.py.me chromium-115.0.5790.102/base/write_build_date_header.py
---- chromium-115.0.5790.102/base/write_build_date_header.py.me	2023-07-22 14:23:42.620679397 +0200
-+++ chromium-115.0.5790.102/base/write_build_date_header.py	2023-07-22 15:24:46.833310310 +0200
-@@ -17,7 +17,7 @@ def main():
-   args = argument_parser.parse_args()
- 
-   date_val = int(args.timestamp)
--  date = datetime.datetime.utcfromtimestamp(date_val)
-+  date =  datetime.datetime.fromtimestamp(date_val, datetime.timezone.utc)
-   output = ('// Generated by //base/write_build_date_header.py\n'
-             '#ifndef BASE_GENERATED_BUILD_DATE_TIMESTAMP \n'
-             f'#define BASE_GENERATED_BUILD_DATE_TIMESTAMP {date_val}'
-diff -up chromium-115.0.5790.102/build/write_buildflag_header.py.me chromium-115.0.5790.102/build/write_buildflag_header.py
---- chromium-115.0.5790.102/build/write_buildflag_header.py.me	2023-07-22 14:16:14.196975451 +0200
-+++ chromium-115.0.5790.102/build/write_buildflag_header.py	2023-07-22 14:20:24.977239994 +0200
-@@ -44,7 +44,7 @@ def GetOptions():
-   header_guard = cmdline_options.output.upper()
-   if header_guard[0].isdigit():
-     header_guard = '_' + header_guard
--  header_guard = re.sub('[^\w]', '_', header_guard)
-+  header_guard = re.sub(r'[^\w]', '_', header_guard)
-   header_guard += '_'
- 
-   # The actual output file is inside the gen dir.
-diff -up chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py.me chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py
---- chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py.me	2023-07-22 14:47:34.230764210 +0200
-+++ chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py	2023-07-22 15:11:50.360983383 +0200
-@@ -9,7 +9,8 @@
- """
- from __future__ import print_function
- import abc
--import imp
-+import types
-+import importlib
- import optparse
- import os
- import re
-@@ -40,6 +41,12 @@ class GoogleProtobufModuleImporter:
-         return filepath
-     return None
- 
-+  def load_source(name: str, path: str) -> types.ModuleType:
-+    spec = importlib.util.spec_from_file_location(name, path)
-+    module = importlib.util.module_from_spec(spec)
-+    spec.loader.exec_module(module)
-+    return module
-+
-   def _module_exists(self, fullname):
-     return self._fullname_to_filepath(fullname) is not None
- 
-@@ -68,7 +75,7 @@ class GoogleProtobufModuleImporter:
-       raise ImportError(fullname)
- 
-     filepath = self._fullname_to_filepath(fullname)
--    return imp.load_source(fullname, filepath)
-+    return load_source(fullname, filepath)
- 
- class BinaryProtoGenerator:
- 
-diff -up chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py.me chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py
---- chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py.me	2023-07-22 15:17:19.114258801 +0200
-+++ chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py	2023-07-22 15:17:43.368200491 +0200
-@@ -32,7 +32,7 @@ def FilterLine(filename, line, output):
-     return
- 
-   if line.startswith("goog.provide"):
--    match = re.match("goog.provide\('([^']+)'\);", line)
-+    match = re.match(r"goog.provide\('([^']+)'\);", line)
-     if not match:
-       print("Invalid goog.provide line in %s:\n%s" % (filename, line))
-       sys.exit(1)
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py.me	2023-07-22 15:12:41.850895179 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py	2023-07-22 15:12:55.844871207 +0200
-@@ -18,7 +18,7 @@ class HTMLGenerationController(object):
- 
-   def GetHTMLForInlineStylesheet(self, contents):
-     if self.current_module is None:
--      if re.search('url\(.+\)', contents):
-+      if re.search(r'url\(.+\)', contents):
-         raise Exception(
-             'Default HTMLGenerationController cannot handle inline style urls')
-       return contents
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py.me	2023-07-22 15:14:06.923717910 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py	2023-07-22 15:18:03.704150614 +0200
-@@ -4,4 +4,4 @@
- 
- 
- def EscapeJSIfNeeded(js):
--  return js.replace('</script>', '<\/script>')
-+  return js.replace(r'</script>', r'<\/script>')
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py.me	2023-07-22 15:14:30.105662532 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py	2023-07-22 15:14:57.977595950 +0200
-@@ -293,6 +293,6 @@ class HTMLModuleParser():
-       html = ''
-     else:
-       if html.find('< /script>') != -1:
--        raise Exception('Escape script tags with <\/script>')
-+        raise Exception(r'Escape script tags with <\/script>')
- 
-     return HTMLModuleParserResults(html)
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py.me	2023-07-22 15:13:12.316842990 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py	2023-07-22 15:13:49.684759091 +0200
-@@ -60,7 +60,7 @@ class ParsedStyleSheet(object):
-       return 'url(data:image/%s;base64,%s)' % (ext[1:], data.decode('utf-8'))
- 
-     # I'm assuming we only have url()'s associated with images
--    return re.sub('url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-+    return re.sub(r'url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-                   InlineUrl, self.contents)
- 
-   def AppendDirectlyDependentFilenamesTo(self, dependent_filenames):
-@@ -72,7 +72,7 @@ class ParsedStyleSheet(object):
-       raise Exception('@imports are not supported')
- 
-     matches = re.findall(
--        'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-+        r'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-         self.contents)
- 
-     def resolve_url(url):
-diff -up chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py.me chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py
---- chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py.me	2023-07-22 15:11:56.826972306 +0200
-+++ chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py	2023-07-22 15:12:37.550902545 +0200
-@@ -119,8 +119,8 @@ class _PreprocessingLoader(jinja2.BaseLo
-             source = self.preprocess(f.read())
-         return source, path, lambda: mtime == os.path.getmtime(path)
- 
--    blockstart = re.compile('{%-?\s*(if|elif|else|for|block|macro)[^}]*%}')
--    blockend = re.compile('{%-?\s*(end(if|for|block|macro)|elif|else)[^}]*%}')
-+    blockstart = re.compile(r'{%-?\s*(if|elif|else|for|block|macro)[^}]*%}')
-+    blockend = re.compile(r'{%-?\s*(end(if|for|block|macro)|elif|else)[^}]*%}')
- 
-     def preprocess(self, source):
-         lines = source.split('\n')
diff --git a/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch b/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
deleted file mode 100644
index 3b79f512487ae..0000000000000
--- a/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-diff -up chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc
---- chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:37.000000000 +0200
-+++ chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc	2023-06-17 16:53:20.216628557 +0200
-@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui
- void CdmPromiseAdapter::Clear(ClearReason reason) {
-   // Reject all outstanding promises.
-   DCHECK(thread_checker_.CalledOnValidThread());
--  for (auto& [promise_id, promise] : promises_) {
-+  for (auto& [p_i, p_e] : promises_) {
-+    auto& promise_id = p_i;
-+    auto& promise = p_e;
-     TRACE_EVENT_NESTABLE_ASYNC_END1(
-         "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id),
-         "status", "cleared");
-diff -up chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
---- chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:41.000000000 +0200
-+++ chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc	2023-06-17 18:47:06.001403966 +0200
-@@ -655,8 +658,10 @@ NGGridSizingTree NGGridLayoutAlgorithm::
-   NGGridSizingTree sizing_tree;
- 
-   if (const auto* layout_subtree = ConstraintSpace().GridLayoutSubtree()) {
--    auto& [grid_items, layout_data, subtree_size] =
--        sizing_tree.CreateSizingData();
-+    auto& [g_i, l_d, s_s] = sizing_tree.CreateSizingData();
-+    auto& grid_items = g_i;
-+    auto& layout_data = l_d;
-+    auto& subtree_size = s_s;
- 
-     const auto& node = Node();
-     grid_items =
-@@ -1798,8 +1803,10 @@ void NGGridLayoutAlgorithm::CompleteTrac
-     bool* opt_needs_additional_pass) const {
-   DCHECK(sizing_subtree);
- 
--  auto& [grid_items, layout_data, subtree_size] =
--      sizing_subtree.SubtreeRootData();
-+  auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData();
-+  auto& grid_items = g_i;
-+  auto& layout_data = l_d;
-+  auto& subtree_size = s_s;
- 
-   const bool is_for_columns = track_direction == kForColumns;
-   const bool has_non_definite_track =
-@@ -1924,8 +1931,10 @@ template <typename CallbackFunc>
- void NGGridLayoutAlgorithm::ForEachSubgrid(
-     const NGGridSizingSubtree& sizing_subtree,
-     const CallbackFunc& callback_func) const {
--  auto& [grid_items, layout_data, subtree_size] =
--      sizing_subtree.SubtreeRootData();
-+  auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData();
-+  auto& grid_items = g_i;
-+  auto& layout_data = l_d;
-+  auto& subtree_size = s_s;
- 
-   // If we know this subtree doesn't have nested subgrids we can exit early
-   // instead of iterating over every grid item looking for them.
-diff -up chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc
---- chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me	2023-06-19 08:04:02.287072722 +0200
-+++ chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc	2023-06-19 08:18:24.576814950 +0200
-@@ -1393,7 +1393,8 @@ void ServiceWorkerContextWrapper::MaybeP
-     return;
-   }
- 
--  auto [document_url, key, callback] = std::move(*request);
-+  auto [d_u, key, callback] = std::move(*request);
-+  auto document_url = d_u;
- 
-   DCHECK(document_url.is_valid());
-   TRACE_EVENT1("ServiceWorker",
-diff -up chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.me chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
---- chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.me	2023-09-15 13:03:00.787257048 +0200
-+++ chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc	2023-09-15 13:15:05.502706522 +0200
-@@ -3437,7 +3437,10 @@ void NGGridLayoutAlgorithm::PlaceGridIte
-   DCHECK(out_row_break_between);
- 
-   const auto& container_space = ConstraintSpace();
--  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
-+  const auto& [g_i, l_d, t_s] = sizing_tree.TreeRootData();
-+  const auto& grid_items = g_i;
-+  const auto& layout_data = l_d;
-+  const auto& tree_size = t_s;
- 
-   const auto* cached_layout_subtree = container_space.GridLayoutSubtree();
-   const auto container_writing_direction =
-@@ -3601,7 +3604,10 @@ void NGGridLayoutAlgorithm::PlaceGridIte
- 
-   // TODO(ikilpatrick): Update |SetHasSeenAllChildren| and early exit if true.
-   const auto& constraint_space = ConstraintSpace();
--  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
-+  const auto& [g_i, l_d, t_s] = sizing_tree.TreeRootData();
-+  const auto& grid_items = g_i;
-+  const auto& layout_data = l_d;
-+  const auto& tree_size =t_s;
- 
-   const auto* cached_layout_subtree = constraint_space.GridLayoutSubtree();
-   const auto container_writing_direction =
diff --git a/srcpkgs/chromium/patches/chromium-119-constexpr.patch b/srcpkgs/chromium/patches/chromium-119-constexpr.patch
deleted file mode 100644
index b195ff408ba81..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-constexpr.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h.me chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h
---- chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h.me	2023-10-31 21:05:05.548565241 +0100
-+++ chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h	2023-10-31 21:20:53.945532094 +0100
-@@ -93,7 +93,7 @@ class MiracleParameter {
- template <>
- class MiracleParameter<std::string> : public MiracleParameterBase<std::string> {
-  public:
--  constexpr MiracleParameter(const base::Feature* feature,
-+  MiracleParameter(const base::Feature* feature,
-                              const char* param_name,
-                              std::string default_value)
-       : MiracleParameterBase(feature, param_name, std::move(default_value)) {}
diff --git a/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch b/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
deleted file mode 100644
index 88d675e8047f0..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
+++ /dev/null
@@ -1,195 +0,0 @@
-commit 87fca7f1759e800bd72b5ab6511eea17d6400a76
-Author: Pilar Molina Lopez <pmolinalopez@chromium.org>
-Date:   Tue Oct 24 19:57:55 2023 +0000
-
-    video: hide UseChromeOSDirectVideoDecoder flag on VA-API devices
-    
-    We are seeing crashes causes by this CHECK statement:
-    https://source.chromium.org/chromium/chromium/src/+/main:content/public/browser/gpu_utils.cc;l=151;drc=0e777ba9b6c34611705d5b145c92bcd09539011c
-    It's triggered when the user manually disables the UseChromeOSDirectVideoDecoder
-    flag on VA-API devices (Intel and AMD). This flag is supported only on
-    non-Intel and non-AMD devices. This CL adds this information to the flag
-    description and hides the flag in case VA-API is used.
-    
-    Bug: 1469285
-    Test: manual test on volteer
-    Change-Id: I153b9ccb3815498c91ce5eee966834060749e247
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4960919
-    Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
-    Reviewed-by: Andres Calderon Jaramillo <andrescj@chromium.org>
-    Reviewed-by: Avi Drissman <avi@chromium.org>
-    Commit-Queue: Pilar Molina Lopez <pmolinalopez@chromium.org>
-    Cr-Commit-Position: refs/heads/main@{#1214411}
-
-diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
-index ee9fb206cde36..0fe18013ab044 100644
---- a/chrome/browser/DEPS
-+++ b/chrome/browser/DEPS
-@@ -418,6 +418,7 @@ include_rules = [
-   "+media/base",  # For media switches
-   "+media/capabilities", # For InMemoryVideoDecodeStatsDB
-   "+media/cdm",
-+  "+media/gpu/buildflags.h",
-   "+media/remoting/device_capability_checker.h",
-   "+media/capture",
-   "+media/midi",  # For midi switches
-diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
-index 84709afaa34d0..777bebeb33d9e 100644
---- a/chrome/browser/about_flags.cc
-+++ b/chrome/browser/about_flags.cc
-@@ -7578,11 +7578,13 @@ const FeatureEntry kFeatureEntries[] = {
- #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
- 
- #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-+#if !BUILDFLAG(USE_VAAPI)
-     {"chromeos-direct-video-decoder",
-      flag_descriptions::kChromeOSDirectVideoDecoderName,
-      flag_descriptions::kChromeOSDirectVideoDecoderDescription,
-      kOsCrOS | kOsLacros,
-      FEATURE_VALUE_TYPE(media::kUseChromeOSDirectVideoDecoder)},
-+#endif  // !BUILDFLAG(USE_VAAPI)
- 
-     {"enable-vbr-encode-acceleration",
-      flag_descriptions::kChromeOSHWVBREncodingName,
-diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
-index 318a8be9ab1a6..d2497d0c403f3 100644
---- a/chrome/browser/flag_descriptions.cc
-+++ b/chrome/browser/flag_descriptions.cc
-@@ -7,6 +7,7 @@
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "components/supervised_user/core/common/buildflags.h"
-+#include "media/gpu/buildflags.h"
- #include "pdf/buildflags.h"
- 
- // Keep in identical order as the header file, see the comment at the top
-@@ -7338,6 +7339,7 @@ const char kQuickOfficeForceFileDownloadDescription[] =
- #endif  // BUILDFLAG(IS_CHROMEOS)
- 
- #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-+#if !BUILDFLAG(USE_VAAPI)
- const char kChromeOSDirectVideoDecoderName[] = "ChromeOS Direct Video Decoder";
- const char kChromeOSDirectVideoDecoderDescription[] =
-     "Enables the hardware-accelerated ChromeOS direct media::VideoDecoder "
-@@ -7345,7 +7347,8 @@ const char kChromeOSDirectVideoDecoderDescription[] =
-     "--platform-disallows-chromeos-direct-video-decoder command line switch "
-     "which is added for platforms where said direct VideoDecoder does not work "
-     "or is not well tested (see the disable_cros_video_decoder USE flag in "
--    "ChromeOS)";
-+    "ChromeOS). This flag is supported only on non-Intel and non-AMD devices.";
-+#endif  // !BUILDFLAG(USE_VAAPI)
- const char kChromeOSHWVBREncodingName[] =
-     "ChromeOS Hardware Variable Bitrate Encoding";
- const char kChromeOSHWVBREncodingDescription[] =
-diff --git a/content/public/browser/gpu_utils.cc b/content/public/browser/gpu_utils.cc
-index dceeca9659a85..3d091359777cc 100644
---- a/content/public/browser/gpu_utils.cc
-+++ b/content/public/browser/gpu_utils.cc
-@@ -133,20 +133,26 @@ const gpu::GpuPreferences GetGpuPreferencesFromCommandLine() {
- #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-   // The direct VideoDecoder is disallowed on some particular SoC/platforms.
-   const bool should_use_direct_video_decoder =
-+#if BUILDFLAG(USE_VAAPI)
-+      true;
-+#else
-       !command_line->HasSwitch(
-           switches::kPlatformDisallowsChromeOSDirectVideoDecoder) &&
-       base::FeatureList::IsEnabled(media::kUseChromeOSDirectVideoDecoder);
-+#endif  // BUILDFLAG(USE_VAAPI)
-+
-+  gpu_preferences.enable_chromeos_direct_video_decoder =
-+#if BUILDFLAG(USE_VAAPI)
-+      should_use_direct_video_decoder;
-+#else
-+      // For testing purposes, the following flag allows using the "other" video
-+      // decoder implementation.
-+      base::FeatureList::IsEnabled(
-+          media::kUseAlternateVideoDecoderImplementation)
-+          ? !should_use_direct_video_decoder
-+          : should_use_direct_video_decoder;
-+#endif  // BUILDFLAG(USE_VAAPI)
- 
--  // For testing purposes, the following flag allows using the "other" video
--  // decoder implementation.
--  if (base::FeatureList::IsEnabled(
--          media::kUseAlternateVideoDecoderImplementation)) {
--    gpu_preferences.enable_chromeos_direct_video_decoder =
--        !should_use_direct_video_decoder;
--  } else {
--    gpu_preferences.enable_chromeos_direct_video_decoder =
--        should_use_direct_video_decoder;
--  }
- #if BUILDFLAG(USE_VAAPI)
-   CHECK(gpu_preferences.enable_chromeos_direct_video_decoder);
- #endif  // BUILDFLAG(USE_VAAPI)
-diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
-index 1af4de46e2a02..3086b1bec2134 100644
---- a/media/base/media_switches.cc
-+++ b/media/base/media_switches.cc
-@@ -1192,6 +1192,7 @@ BASE_FEATURE(kChromeOSHWVBREncoding,
-              "ChromeOSHWVBREncoding",
-              base::FEATURE_DISABLED_BY_DEFAULT);
- 
-+#if !BUILDFLAG(USE_VAAPI)
- // Enable the hardware-accelerated direct video decoder instead of the one
- // needing the VdaVideoDecoder adapter. This flag is used mainly as a
- // chrome:flag for developers debugging issues as well as to be able to
-@@ -1200,6 +1201,7 @@ BASE_FEATURE(kChromeOSHWVBREncoding,
- BASE_FEATURE(kUseChromeOSDirectVideoDecoder,
-              "UseChromeOSDirectVideoDecoder",
-              base::FEATURE_ENABLED_BY_DEFAULT);
-+#endif  // !BUILDFLAG(USE_VAAPI)
- 
- // Limit the number of concurrent hardware decoder instances on ChromeOS.
- BASE_FEATURE(kLimitConcurrentDecoderInstances,
-@@ -1228,7 +1230,7 @@ BASE_FEATURE(kPreferSoftwareMT21,
-              "PreferSoftwareMT21",
-              base::FEATURE_DISABLED_BY_DEFAULT);
- #endif  // defined(ARCH_CPU_ARM_FAMILY)
--#if BUILDFLAG(IS_CHROMEOS)
-+#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- // ChromeOS has one of two VideoDecoder implementations active based on
- // SoC/board specific configurations that are sent via command line flags. This
- // switch allows using the non default implementation for testing.
-@@ -1236,7 +1238,7 @@ BASE_FEATURE(kPreferSoftwareMT21,
- BASE_FEATURE(kUseAlternateVideoDecoderImplementation,
-              "UseAlternateVideoDecoderImplementation",
-              base::FEATURE_DISABLED_BY_DEFAULT);
--#endif  // BUILDFLAG(IS_CHROMEOS)
-+#endif  // BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- 
- #if BUILDFLAG(IS_WIN)
-diff --git a/media/base/media_switches.h b/media/base/media_switches.h
-index 1d9c2c2d9df73..96d9595be110e 100644
---- a/media/base/media_switches.h
-+++ b/media/base/media_switches.h
-@@ -14,6 +14,7 @@
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "media/base/media_export.h"
-+#include "media/gpu/buildflags.h"
- #include "media/media_buildflags.h"
- 
- namespace base {
-@@ -381,16 +382,18 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kBuiltInHlsPlayer);
- #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kChromeOSHWAV1Decoder);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kChromeOSHWVBREncoding);
-+#if !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseChromeOSDirectVideoDecoder);
-+#endif  // !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kLimitConcurrentDecoderInstances);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUSeSequencedTaskRunnerForVEA);
- #if defined(ARCH_CPU_ARM_FAMILY)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kPreferGLImageProcessor);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kPreferSoftwareMT21);
- #endif  // defined(ARCH_CPU_ARM_FAMILY)
--#if BUILDFLAG(IS_CHROMEOS)
-+#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseAlternateVideoDecoderImplementation);
--#endif  // BUILDFLAG(IS_CHROMEOS)
-+#endif  // BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- 
- #if BUILDFLAG(IS_WIN)
diff --git a/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch b/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
deleted file mode 100644
index 5cb969f4f40cf..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h.me chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h
---- chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h.me	2023-10-27 20:07:16.421230815 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h	2023-10-27 20:07:36.883600085 +0200
-@@ -52,7 +52,7 @@ class FragmentDataIterator
-  public:
-   explicit FragmentDataIterator(const LayoutObject& object)
-       : FragmentDataIteratorBase(&object.FirstFragment()) {}
--  explicit FragmentDataIterator(nullptr_t)
-+  explicit FragmentDataIterator(std::nullptr_t)
-       : FragmentDataIteratorBase(nullptr) {}
- };
- 
-@@ -63,7 +63,7 @@ class MutableFragmentDataIterator
-   explicit MutableFragmentDataIterator(const LayoutObject& object)
-       : FragmentDataIteratorBase(
-             &object.GetMutableForPainting().FirstFragment()) {}
--  explicit MutableFragmentDataIterator(nullptr_t)
-+  explicit MutableFragmentDataIterator(std::nullptr_t)
-       : FragmentDataIteratorBase(nullptr) {}
- };
- 
diff --git a/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch b/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
deleted file mode 100644
index 717d897446c7c..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-commit bdcc23e0a5e7e220660d3f54c97262f9a4c31606
-Author: Nick Diego Yamane <nickdiego@igalia.com>
-Date:   Thu Nov 2 17:26:25 2023 +0000
-
-    gbm: nvidia: use separate bo to verify modifiers
-    
-    Buggy Nvidia drivers fail to return FDs for planes of a BO which had
-    already an imported BO destroyed before. This is a workaround for that
-    issue, which consists of creating/destroying a separate 1x1 BO for
-    validating the modifiers before actually creating the final requested
-    BO, which for now is limited to IS_LINUX builds.
-    
-    The Nvidia driver bug is being tracked under internal bug 4315529. There
-    seems to be other issues when running under Wayland with Nvidia, which
-    will be tracked and addressed in separate patches.
-    
-    R=dcastagna, msisov@igalia.com
-    
-      with ozone/wayland backend and verify GPU acceleration is not broken.
-    
-    Test: In a single Nvidia GPU setup, with proprietary driver, run Chrome
-    Bug: 1273758, 1478684, 1463851
-    Change-Id: I9f322bcf40b460bcd4ead02f05dd2e9a8d271cea
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4989782
-    Reviewed-by: Maksim Sisov <msisov@igalia.com>
-    Commit-Queue: Nick Yamane <nickdiego@igalia.com>
-    Cr-Commit-Position: refs/heads/main@{#1218924}
-
-diff --git a/ui/gfx/linux/gbm_wrapper.cc b/ui/gfx/linux/gbm_wrapper.cc
-index bf90b76605f68..14918c19c0ab0 100644
---- a/ui/gfx/linux/gbm_wrapper.cc
-+++ b/ui/gfx/linux/gbm_wrapper.cc
-@@ -11,6 +11,7 @@
- #include "base/logging.h"
- #include "base/memory/raw_ptr.h"
- #include "base/memory/raw_ptr_exclusion.h"
-+#include "base/numerics/safe_conversions.h"
- #include "base/posix/eintr_wrapper.h"
- #include "skia/ext/legacy_display_globals.h"
- #include "third_party/skia/include/core/SkSurface.h"
-@@ -71,6 +72,7 @@ base::ScopedFD GetPlaneFdForBo(gbm_bo* bo, size_t plane) {
-   int ret;
-   // Use DRM_RDWR to allow the fd to be mappable in another process.
-   ret = drmPrimeHandleToFD(dev_fd, plane_handle, DRM_CLOEXEC | DRM_RDWR, &fd);
-+  PLOG_IF(ERROR, ret != 0) << "Failed to get fd for plane.";
- 
-   // Older DRM implementations blocked DRM_RDWR, but gave a read/write mapping
-   // anyways
-@@ -301,58 +303,82 @@ class Device final : public ui::GbmDevice {
- 
-   std::unique_ptr<ui::GbmBuffer> CreateBufferWithModifiers(
-       uint32_t format,
--      const gfx::Size& size,
-+      const gfx::Size& requested_size,
-       uint32_t flags,
-       const std::vector<uint64_t>& modifiers) override {
--    if (modifiers.empty())
--      return CreateBuffer(format, size, flags);
--
--    std::vector<uint64_t> filtered_modifiers =
--        GetFilteredModifiers(format, flags, modifiers);
--    struct gbm_bo* bo = nullptr;
--    while (filtered_modifiers.size() > 0) {
--      bo = gbm_bo_create_with_modifiers(device_, size.width(), size.height(),
--                                        format, filtered_modifiers.data(),
--                                        filtered_modifiers.size());
--      if (!bo) {
-+    if (modifiers.empty()) {
-+      return CreateBuffer(format, requested_size, flags);
-+    }
-+
-+    // Buggy drivers prevent us from getting plane FDs from a BO which had its
-+    // previously imported BO destroyed. E.g: Nvidia. Thus, on Linux Desktop, we
-+    // do the create/import modifiers validation loop below using a separate set
-+    // of 1x1 BOs which are destroyed before creating the final BO creation used
-+    // to instantiate the returned GbmBuffer.
-+    gfx::Size size =
-+#if BUILDFLAG(IS_LINUX)
-+        gfx::Size(1, 1);
-+#else
-+        requested_size;
-+#endif
-+    auto filtered_modifiers = GetFilteredModifiers(format, flags, modifiers);
-+    struct gbm_bo* created_bo = nullptr;
-+    bool valid_modifiers = false;
-+
-+    while (!valid_modifiers && !filtered_modifiers.empty()) {
-+      created_bo = gbm_bo_create_with_modifiers(
-+          device_, size.width(), size.height(), format,
-+          filtered_modifiers.data(), filtered_modifiers.size());
-+      if (!created_bo) {
-         return nullptr;
-       }
- 
--      struct gbm_import_fd_modifier_data fd_data;
--      fd_data.width = size.width();
--      fd_data.height = size.height();
--      fd_data.format = format;
--      fd_data.num_fds = gbm_bo_get_plane_count(bo);
--      fd_data.modifier = gbm_bo_get_modifier(bo);
--
--      // Store fds in the vector of base::ScopedFDs. Will be released
--      // automatically.
-+      const int planes_count = gbm_bo_get_plane_count(created_bo);
-+      struct gbm_import_fd_modifier_data fd_data = {
-+          .width = base::checked_cast<uint32_t>(size.width()),
-+          .height = base::checked_cast<uint32_t>(size.height()),
-+          .format = format,
-+          .num_fds = base::checked_cast<uint32_t>(planes_count),
-+          .modifier = gbm_bo_get_modifier(created_bo)};
-+      // Store fds in a base::ScopedFDs vector. Will be released automatically.
-       std::vector<base::ScopedFD> fds;
-       for (size_t i = 0; i < static_cast<size_t>(fd_data.num_fds); ++i) {
--        fds.emplace_back(GetPlaneFdForBo(bo, i));
-+        fds.emplace_back(GetPlaneFdForBo(created_bo, i));
-         fd_data.fds[i] = fds.back().get();
--        fd_data.strides[i] = gbm_bo_get_stride_for_plane(bo, i);
--        fd_data.offsets[i] = gbm_bo_get_offset(bo, i);
-+        fd_data.strides[i] = gbm_bo_get_stride_for_plane(created_bo, i);
-+        fd_data.offsets[i] = gbm_bo_get_offset(created_bo, i);
-       }
- 
--      struct gbm_bo* bo_import =
-+      struct gbm_bo* imported_bo =
-           gbm_bo_import(device_, GBM_BO_IMPORT_FD_MODIFIER, &fd_data, flags);
--      if (bo_import) {
--        gbm_bo_destroy(bo_import);
--        break;
-+
-+      if (imported_bo) {
-+        valid_modifiers = true;
-+        gbm_bo_destroy(imported_bo);
-       } else {
--        gbm_bo_destroy(bo);
--        bo = nullptr;
-         AddModifierToBlocklist(format, flags, fd_data.modifier);
-         filtered_modifiers =
-             GetFilteredModifiers(format, flags, filtered_modifiers);
-       }
-+
-+      if (!valid_modifiers || size != requested_size) {
-+        gbm_bo_destroy(created_bo);
-+        created_bo = nullptr;
-+      }
-     }
--    if (!bo) {
--      return nullptr;
-+
-+    // If modifiers were successfully verified though `created_bo` is null here,
-+    // it it means that the buffer created for verification could not be reused,
-+    // ie: different size, so create it now with the `requested_size`.
-+    if (valid_modifiers && !created_bo) {
-+      created_bo = gbm_bo_create_with_modifiers(
-+          device_, requested_size.width(), requested_size.height(), format,
-+          filtered_modifiers.data(), filtered_modifiers.size());
-+      PLOG_IF(ERROR, !created_bo) << "Failed to create BO with modifiers.";
-     }
- 
--    return CreateBufferForBO(bo, format, size, flags);
-+    return created_bo ? CreateBufferForBO(created_bo, format, size, flags)
-+                      : nullptr;
-   }
- 
-   std::unique_ptr<ui::GbmBuffer> CreateBufferFromHandle(
diff --git a/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch b/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
new file mode 100644
index 0000000000000..bb461ef3664a2
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
@@ -0,0 +1,14 @@
+--- chromium-120.0.6099.35/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h.than	2023-11-26 13:50:07.005519877 +0100
++++ chromium-120.0.6099.35/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h	2023-11-26 13:50:49.727267240 +0100
+@@ -152,10 +152,7 @@
+   (!BUILDFLAG(PUT_REF_COUNT_IN_PREVIOUS_SLOT) && \
+    defined(ARCH_CPU_LITTLE_ENDIAN))
+ 
+-#define PA_CONFIG_HAS_MEMORY_TAGGING()              \
+-  (defined(ARCH_CPU_ARM64) && defined(__clang__) && \
+-   !defined(ADDRESS_SANITIZER) &&                   \
+-   (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
++#define PA_CONFIG_HAS_MEMORY_TAGGING() 0
+ 
+ #if PA_CONFIG(HAS_MEMORY_TAGGING)
+ static_assert(sizeof(void*) == 8);
diff --git a/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch b/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
new file mode 100644
index 0000000000000..98216ddb465ca
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
@@ -0,0 +1,12 @@
+diff -up chromium-120.0.6099.56/media/base/media_switches.cc.me chromium-120.0.6099.56/media/base/media_switches.cc
+--- chromium-120.0.6099.56/media/base/media_switches.cc.me	2023-12-02 11:43:21.990775897 +0100
++++ chromium-120.0.6099.56/media/base/media_switches.cc	2023-12-02 11:45:23.248006377 +0100
+@@ -1636,7 +1636,7 @@ BASE_FEATURE(kUseSharedImagesForPepperVi
+ // Enables FFmpeg allow lists for supported codecs / containers.
+ BASE_FEATURE(kFFmpegAllowLists,
+              "FFmpegAllowLists",
+-             base::FEATURE_ENABLED_BY_DEFAULT);
++             base::FEATURE_DISABLED_BY_DEFAULT);
+ 
+ #if BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS)
+ // Allows decoding of theora / vp3 content.
diff --git a/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch b/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
new file mode 100644
index 0000000000000..6a2585b953c3b
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
@@ -0,0 +1,14 @@
+--- chromium-120.0.6099.35/chrome/browser/media/router/media_router_feature.cc.orig	2023-11-26 13:25:34.724228755 +0100
++++ chromium-120.0.6099.35/chrome/browser/media/router/media_router_feature.cc	2023-11-26 13:28:26.452359146 +0100
+@@ -71,11 +71,7 @@
+ // TODO(b/202294946): Remove when enabled by default on ChromeOS.
+ BASE_FEATURE(kGlobalMediaControlsCastStartStop,
+              "GlobalMediaControlsCastStartStop",
+-#if BUILDFLAG(IS_CHROMEOS)
+              base::FEATURE_DISABLED_BY_DEFAULT);
+-#else
+-             base::FEATURE_ENABLED_BY_DEFAULT);
+-#endif  // BUILDFLAG(IS_CHROMEOS)
+ #endif  // !BUILDFLAG(IS_ANDROID)
+ 
+ namespace {
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
new file mode 100644
index 0000000000000..96258e67aaebb
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
@@ -0,0 +1,230 @@
+commit 57526b8dc45b2e6c67bba7306f1dde73b1f2910c
+Author: sisidovski <sisidovski@chromium.org>
+Date:   Tue Oct 24 09:32:49 2023 +0000
+
+    Remove unused items from the RaceNetworkRequest hashmap
+    
+    When the AutoPreload or the race-network-and-fetch-handler option in the
+    static routing API is enabled, network requests are dispatched and
+    URLLoaderFactories are held in a hashmap in ServiceWorkerGlobalScope.
+    Those are consumed inside the fetch handler when fetch(e.request) is
+    called. But if the fetch handler doesn't call fetch() e.g. fallback,
+    those hashmap items does not have a chance to be removed.
+    
+    This CL changes the hashmap items to be removed when the fetch event
+    finishes, and the URLLoaderFactory is still not consumed at that time.
+    This may loose the dedupe capability if fetch() is called later e.g.
+    setTimeout(() => fetch()), but it makes sense to prioritize keeping the
+    hashmap small.
+    
+    Change-Id: I51bdc9d5eb5185f2b5b4df6ee785715b1180c848
+    Bug: 1492640
+    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4964840
+    Reviewed-by: Minoru Chikamune <chikamune@chromium.org>
+    Commit-Queue: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+    Reviewed-by: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+    Cr-Commit-Position: refs/heads/main@{#1214064}
+
+diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+index 02887edc10883..b3624fc0162df 100644
+--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
++++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+@@ -46,6 +46,7 @@
+ #include "services/network/public/cpp/cross_origin_embedder_policy.h"
+ #include "services/network/public/mojom/cookie_manager.mojom-blink.h"
+ #include "services/network/public/mojom/cross_origin_embedder_policy.mojom.h"
++#include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
+ #include "third_party/blink/public/common/features.h"
+ #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
+ #include "third_party/blink/public/mojom/notifications/notification.mojom-blink.h"
+@@ -1096,6 +1097,10 @@ void ServiceWorkerGlobalScope::DidHandleFetchEvent(
+       TRACE_ID_WITH_SCOPE(kServiceWorkerGlobalScopeTraceScope,
+                           TRACE_ID_LOCAL(event_id)),
+       TRACE_EVENT_FLAG_FLOW_IN, "status", MojoEnumToString(status));
++
++  // Delete the URLLoaderFactory for the RaceNetworkRequest if it's not used.
++  RemoveItemFromRaceNetworkRequests(event_id);
++
+   if (!RunEventCallback(&fetch_event_callbacks_, event_queue_.get(), event_id,
+                         status)) {
+     // The event may have been aborted. Its response callback also needs to be
+@@ -1495,6 +1500,7 @@ void ServiceWorkerGlobalScope::AbortCallbackForFetchEvent(
+     response_callback_iter->value->TakeValue().reset();
+     fetch_response_callbacks_.erase(response_callback_iter);
+   }
++  RemoveItemFromRaceNetworkRequests(event_id);
+ 
+   // Run the event callback with the error code.
+   auto event_callback_iter = fetch_event_callbacks_.find(event_id);
+@@ -1551,52 +1557,11 @@ void ServiceWorkerGlobalScope::StartFetchEvent(
+ 
+   if (params->race_network_request_loader_factory &&
+       params->request->service_worker_race_network_request_token) {
+-    auto insert_result = race_network_request_loader_factories_.insert(
+-        String(params->request->service_worker_race_network_request_token
+-                   ->ToString()),
+-        std::move(params->race_network_request_loader_factory));
+-
+-    // DumpWithoutCrashing if the token is empty, or not inserted as a new entry
+-    // to |race_network_request_loader_factories_|.
+-    // TODO(crbug.com/1492640) Remove DumpWithoutCrashing once we collect data
+-    // and identify the cause.
+-    static bool has_dumped_without_crashing_for_empty_token = false;
+-    static bool has_dumped_without_crashing_for_not_new_entry = false;
+-    if (!has_dumped_without_crashing_for_empty_token &&
+-        params->request->service_worker_race_network_request_token
+-            ->is_empty()) {
+-      has_dumped_without_crashing_for_empty_token = true;
+-      SCOPED_CRASH_KEY_BOOL(
+-          "SWGlobalScope", "empty_race_token",
+-          params->request->service_worker_race_network_request_token
+-              ->is_empty());
+-      SCOPED_CRASH_KEY_STRING64(
+-          "SWGlobalScope", "race_token_string",
+-          params->request->service_worker_race_network_request_token
+-              ->ToString());
+-      SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
+-                            insert_result.is_new_entry);
+-      SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
+-                                 params->request->url.GetString().Utf8());
+-      base::debug::DumpWithoutCrashing();
+-    }
+-    if (!has_dumped_without_crashing_for_not_new_entry &&
+-        !insert_result.is_new_entry) {
+-      has_dumped_without_crashing_for_not_new_entry = true;
+-      SCOPED_CRASH_KEY_BOOL(
+-          "SWGlobalScope", "empty_race_token",
+-          params->request->service_worker_race_network_request_token
+-              ->is_empty());
+-      SCOPED_CRASH_KEY_STRING64(
+-          "SWGlobalScope", "race_token_string",
+-          params->request->service_worker_race_network_request_token
+-              ->ToString());
+-      SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
+-                            insert_result.is_new_entry);
+-      SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
+-                                 params->request->url.GetString().Utf8());
+-      base::debug::DumpWithoutCrashing();
+-    }
++    InsertNewItemToRaceNetworkRequests(
++        event_id,
++        params->request->service_worker_race_network_request_token.value(),
++        std::move(params->race_network_request_loader_factory),
++        params->request->url);
+   }
+ 
+   Request* request = Request::Create(
+@@ -2808,12 +2773,71 @@ bool ServiceWorkerGlobalScope::SetAttributeEventListener(
+ absl::optional<mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>
+ ServiceWorkerGlobalScope::FindRaceNetworkRequestURLLoaderFactory(
+     const base::UnguessableToken& token) {
+-  mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> result =
+-      race_network_request_loader_factories_.Take(String(token.ToString()));
++  std::unique_ptr<RaceNetworkRequestInfo> result =
++      race_network_requests_.Take(String(token.ToString()));
+   if (result) {
+-    return result;
++    race_network_request_fetch_event_ids_.erase(result->fetch_event_id);
++    return absl::optional<
++        mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>(
++        std::move(result->url_loader_factory));
+   }
+   return absl::nullopt;
+ }
+ 
++void ServiceWorkerGlobalScope::InsertNewItemToRaceNetworkRequests(
++    int fetch_event_id,
++    const base::UnguessableToken& token,
++    mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++        url_loader_factory,
++    const KURL& request_url) {
++  auto race_network_request_token = String(token.ToString());
++  auto info = std::make_unique<RaceNetworkRequestInfo>(
++      fetch_event_id, race_network_request_token,
++      std::move(url_loader_factory));
++  race_network_request_fetch_event_ids_.insert(fetch_event_id, info.get());
++  auto insert_result = race_network_requests_.insert(race_network_request_token,
++                                                     std::move(info));
++
++  // DumpWithoutCrashing if the token is empty, or not inserted as a new entry
++  // to |race_network_request_loader_factories_|.
++  // TODO(crbug.com/1492640) Remove DumpWithoutCrashing once we collect data
++  // and identify the cause.
++  static bool has_dumped_without_crashing_for_empty_token = false;
++  static bool has_dumped_without_crashing_for_not_new_entry = false;
++  if (!has_dumped_without_crashing_for_empty_token && token.is_empty()) {
++    has_dumped_without_crashing_for_empty_token = true;
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "empty_race_token",
++                          token.is_empty());
++    SCOPED_CRASH_KEY_STRING64("SWGlobalScope", "race_token_string",
++                              token.ToString());
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
++                          insert_result.is_new_entry);
++    SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
++                               request_url.GetString().Utf8());
++    base::debug::DumpWithoutCrashing();
++  }
++  if (!has_dumped_without_crashing_for_not_new_entry &&
++      !insert_result.is_new_entry) {
++    has_dumped_without_crashing_for_not_new_entry = true;
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "empty_race_token",
++                          token.is_empty());
++    SCOPED_CRASH_KEY_STRING64("SWGlobalScope", "race_token_string",
++                              token.ToString());
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
++                          insert_result.is_new_entry);
++    SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
++                               request_url.GetString().Utf8());
++    base::debug::DumpWithoutCrashing();
++  }
++}
++
++void ServiceWorkerGlobalScope::RemoveItemFromRaceNetworkRequests(
++    int fetch_event_id) {
++  RaceNetworkRequestInfo* info =
++      race_network_request_fetch_event_ids_.Take(fetch_event_id);
++  if (info) {
++    race_network_requests_.erase(info->token);
++  }
++}
++
+ }  // namespace blink
+diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+index 46c431b395825..ac4cac0b1d8fb 100644
+--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
++++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+@@ -623,6 +623,14 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final
+   // ServiceWorker.FetchEvent.QueuingTime histogram.
+   void RecordQueuingTime(base::TimeTicks created_time);
+ 
++  void InsertNewItemToRaceNetworkRequests(
++      int fetch_event_id,
++      const base::UnguessableToken& token,
++      mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++          url_loader_factory,
++      const KURL& request_url);
++  void RemoveItemFromRaceNetworkRequests(int fetch_event_id);
++
+   Member<ServiceWorkerClients> clients_;
+   Member<ServiceWorkerRegistration> registration_;
+   Member<::blink::ServiceWorker> service_worker_;
+@@ -768,10 +776,17 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final
+ 
+   blink::BlinkStorageKey storage_key_;
+ 
++  struct RaceNetworkRequestInfo {
++    int fetch_event_id;
++    String token;
++    mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++        url_loader_factory;
++  };
+   // TODO(crbug.com/918702) WTF::HashMap cannot use base::UnguessableToken as a
+   // key. As a workaround uses WTF::String as a key instead.
+-  HashMap<String, mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>
+-      race_network_request_loader_factories_;
++  HashMap<String, std::unique_ptr<RaceNetworkRequestInfo>>
++      race_network_requests_;
++  HashMap<int, RaceNetworkRequestInfo*> race_network_request_fetch_event_ids_;
+ 
+   HeapMojoAssociatedRemote<mojom::blink::AssociatedInterfaceProvider>
+       remote_associated_interfaces_{this};
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
new file mode 100644
index 0000000000000..8bbbbe9483632
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
@@ -0,0 +1 @@
+-RNp1
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch b/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
new file mode 100644
index 0000000000000..112da65b4d9b6
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
@@ -0,0 +1,16 @@
+diff -up chromium-120.0.6099.56/third_party/libc++/src/include/__config.me chromium-120.0.6099.56/third_party/libc++/src/include/__config
+--- chromium-120.0.6099.56/third_party/libc++/src/include/__config.me	2023-12-03 00:05:51.254483474 +0100
++++ chromium-120.0.6099.56/third_party/libc++/src/include/__config	2023-12-03 00:06:05.872863168 +0100
+@@ -32,11 +32,7 @@
+ 
+ // Warn if a compiler version is used that is not supported anymore
+ // LLVM RELEASE Update the minimum compiler versions
+-#  if defined(_LIBCPP_CLANG_VER)
+-#    if _LIBCPP_CLANG_VER < 1500
+-#      warning "Libc++ only supports Clang 15 and later"
+-#    endif
+-#  elif defined(_LIBCPP_APPLE_CLANG_VER)
++#  if defined(_LIBCPP_APPLE_CLANG_VER)
+ #    if _LIBCPP_APPLE_CLANG_VER < 1500
+ #      warning "Libc++ only supports AppleClang 15 and later"
+ #    endif
diff --git a/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch b/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
new file mode 100644
index 0000000000000..72c7b7ec41c28
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
@@ -0,0 +1,13 @@
+diff -up chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn.me chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn
+--- chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn.me	2023-11-26 16:14:15.364064126 +0100
++++ chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn	2023-11-26 16:41:16.877321990 +0100
+@@ -21,6 +21,9 @@ if (use_atk) {
+     minor = atspi_version[1]
+     micro = atspi_version[2]
+ 
++    # gn workaround for the error: Assignment had no effect
++    print("ATSPI Version: $major.$minor.$micro")
++
+     # ATSPI 2.49.90 now defines these for us and it's an error for us to
+     # redefine them on the compiler command line.
+     # See ATSPI 927344a34cd5bf81fc64da4968241735ecb4f03b
diff --git a/srcpkgs/chromium/patches/chromium-119-missing-header-files.patch b/srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
similarity index 97%
rename from srcpkgs/chromium/patches/chromium-119-missing-header-files.patch
rename to srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
index a2542ef420eaf..44f867475b218 100644
--- a/srcpkgs/chromium/patches/chromium-119-missing-header-files.patch
+++ b/srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
@@ -131,17 +131,6 @@ diff -up chromium-109.0.5414.74/third_party/swiftshader/src/System/LRUCache.hpp.
  #include <cstddef>
  #include <functional>
  #include <unordered_set>
-diff -up chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
---- chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me	2023-01-17 15:40:23.854386206 +0100
-+++ chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h	2023-01-17 16:58:19.397862885 +0100
-@@ -2388,6 +2388,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeV
- #ifdef VMA_IMPLEMENTATION
- #undef VMA_IMPLEMENTATION
- 
-+#include <cstdio>
- #include <cstdint>
- #include <cstdlib>
- #include <cstring>
 diff -up chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h
 --- chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me	2023-01-17 18:08:25.745491353 +0100
 +++ chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h	2023-01-17 18:08:35.777667632 +0100
diff --git a/srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch b/srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
similarity index 67%
rename from srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch
rename to srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
index a16c979c37f1c..b1d987adeff8d 100644
--- a/srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch
+++ b/srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
@@ -1,6 +1,25 @@
-diff -up chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constructor chromium-119.0.6045.59/base/trace_event/trace_log.cc
---- chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constructor	2023-10-26 18:16:51.000000000 +0200
-+++ chromium-119.0.6045.59/base/trace_event/trace_log.cc	2023-10-30 16:51:02.270151487 +0100
+diff -up chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc.no_matching_constructor chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc
+--- chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc.no_matching_constructor	2023-11-29 22:39:40.000000000 +0100
++++ chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc	2023-12-03 17:31:25.748420189 +0100
+@@ -218,13 +218,13 @@ PersistentSparseHistogramDataManager::Lo
+     // The sample-record could be for any sparse histogram. Add the reference
+     // to the appropriate collection for later use.
+     if (found_id == match_id) {
+-      found_records.emplace_back(ref, value);
++      found_records.emplace_back() = {ref, value};
+       found = true;
+     } else {
+       std::vector<ReferenceAndSample>* samples =
+           GetSampleMapRecordsWhileLocked(found_id);
+       CHECK(samples);
+-      samples->emplace_back(ref, value);
++      samples->emplace_back() = {ref, value};
+     }
+   }
+ 
+diff -up chromium-120.0.6099.56/base/trace_event/trace_log.cc.no_matching_constructor chromium-120.0.6099.56/base/trace_event/trace_log.cc
+--- chromium-120.0.6099.56/base/trace_event/trace_log.cc.no_matching_constructor	2023-11-29 22:39:40.000000000 +0100
++++ chromium-120.0.6099.56/base/trace_event/trace_log.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -2191,8 +2191,8 @@ void TraceLog::SetTraceBufferForTesting(
  #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
  void TraceLog::OnSetup(const perfetto::DataSourceBase::SetupArgs& args) {
@@ -12,9 +31,9 @@ diff -up chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constr
  }
  
  void TraceLog::OnStart(const perfetto::DataSourceBase::StartArgs&) {
-diff -up chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc
---- chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor	2023-10-26 18:16:57.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc	2023-10-30 16:51:02.269151462 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc
+--- chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor	2023-11-29 22:39:47.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -226,8 +226,8 @@ void OneTimePermissionProvider::OnSuspen
  
        while (rule_iterator && rule_iterator->HasNext()) {
@@ -37,9 +56,9 @@ diff -up chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permiss
        permissions::PermissionUmaUtil::RecordOneTimePermissionEvent(
            content_setting_type, trigger_event);
      }
-diff -up chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc
---- chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor	2023-10-26 18:16:57.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc	2023-10-30 16:51:02.267151412 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc
+--- chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor	2023-11-29 22:39:48.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -67,8 +67,8 @@ base::flat_map<std::string, SAMLProfileA
    // TODO(crbug.com/1445072): Add actual domains with attribute names.
    profile_attributes->insert(std::make_pair(
@@ -51,9 +70,9 @@ diff -up chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/pro
  
    // Extract domains and attributes from the command line switch.
    const base::CommandLine& command_line =
-diff -up chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
---- chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor	2023-10-26 18:17:00.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc	2023-10-30 16:51:02.262151288 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor	2023-11-29 22:39:52.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -474,10 +474,10 @@ void ChromeOmniboxClient::OnAutocomplete
                alternative_nav_match);
  
@@ -67,9 +86,117 @@ diff -up chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.
  
    if (browser_) {
      auto navigation = chrome::OpenCurrentURL(browser_);
-diff -up chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matching_constructor chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc
---- chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matching_constructor	2023-10-26 18:17:01.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc	2023-10-30 16:51:02.268151437 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc.no_matching_constructor	2023-11-29 22:39:52.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -148,8 +148,8 @@ SafetyHubMenuNotificationService::GetNot
+   // The information related to showing the notification needs to be persisted
+   // as well.
+   SaveNotificationsToPrefs();
+-  return MenuNotificationEntry(notification_to_show->GetNotificationCommandId(),
+-                               notification_to_show->GetNotificationString());
++  return MenuNotificationEntry{notification_to_show->GetNotificationCommandId(),
++                               notification_to_show->GetNotificationString()};
+ }
+ 
+ absl::optional<ResultMap>
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc	2023-12-03 17:31:25.749420208 +0100
+@@ -55,12 +55,12 @@ std::vector<EmbeddedPermissionPromptAskV
+ EmbeddedPermissionPromptAskView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
++        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+   }
+-  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
+-                       ButtonType::kAllow, ui::ButtonStyle::kTonal);
++  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
++                       ButtonType::kAllow, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h	2023-12-03 17:31:25.750420227 +0100
+@@ -86,6 +86,7 @@ class EmbeddedPermissionPromptBaseView :
+   struct RequestLineConfiguration {
+     const raw_ptr<const gfx::VectorIcon> icon;
+     std::u16string message;
++    RequestLineConfiguration(auto i, auto m) : icon(i), message(m) { }
+   };
+ 
+   struct ButtonConfiguration {
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -48,8 +48,8 @@ EmbeddedPermissionPromptPolicyView::GetR
+ std::vector<EmbeddedPermissionPromptPolicyView::ButtonConfiguration>
+ EmbeddedPermissionPromptPolicyView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
+-                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal);
++  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
++                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -63,18 +63,18 @@ EmbeddedPermissionPromptPreviouslyDenied
+ std::vector<EmbeddedPermissionPromptPreviouslyDeniedView::ButtonConfiguration>
+ EmbeddedPermissionPromptPreviouslyDeniedView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_NOT_ALLOWING),
+-      ButtonType::kContinueNotAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kContinueNotAllowing, ui::ButtonStyle::kTonal};
+ 
+   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
++        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+   } else {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllow, ui::ButtonStyle::kTonal);
++        ButtonType::kAllow, ui::ButtonStyle::kTonal};
+   }
+   return buttons;
+ }
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -57,13 +57,13 @@ EmbeddedPermissionPromptPreviouslyGrante
+ std::vector<EmbeddedPermissionPromptPreviouslyGrantedView::ButtonConfiguration>
+ EmbeddedPermissionPromptPreviouslyGrantedView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_ALLOWING),
+-      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal};
+ 
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_STOP_ALLOWING),
+-      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc.no_matching_constructor chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc
+--- chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc.no_matching_constructor	2023-11-29 22:39:54.000000000 +0100
++++ chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc	2023-12-03 17:31:25.750420227 +0100
 @@ -346,7 +346,7 @@ Status ParseMobileEmulation(const base::
                          "'version' field of type string");
          }
@@ -88,10 +215,10 @@ diff -up chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matc
        }
  
        client_hints.full_version_list = std::move(full_version_list);
-diff -up chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc
---- chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor	2023-10-30 16:51:02.273151562 +0100
-+++ chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc	2023-10-30 17:41:12.685887538 +0100
-@@ -195,9 +195,9 @@ class ContactInfoProfileSetter {
+diff -up chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc
+--- chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor	2023-11-29 22:39:57.000000000 +0100
++++ chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -197,9 +197,9 @@ class ContactInfoProfileSetter {
        CHECK(observations.empty());
        for (const sync_pb::ContactInfoSpecifics::Observation& proto_observation :
             metadata.observations()) {
@@ -103,10 +230,38 @@ diff -up chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sy
        }
      }
    }
-diff -up chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
---- chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc	2023-10-30 16:51:02.260151238 +0100
-@@ -1530,7 +1530,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOut
+diff -up chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc.no_matching_constructor chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc
+--- chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc.no_matching_constructor	2023-11-29 22:39:57.000000000 +0100
++++ chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -1763,10 +1763,10 @@ std::unique_ptr<AutofillProfile> Autofil
+     }
+ 
+     base::span<const uint8_t> observations_data = s.ColumnBlob(3);
+-    field_type_values.emplace_back(
++    field_type_values.emplace_back() = {
+         type, s.ColumnString16(1), s.ColumnInt(2),
+         std::vector<uint8_t>(observations_data.begin(),
+-                             observations_data.end()));
++                             observations_data.end())};
+ 
+     if (type == ADDRESS_HOME_COUNTRY) {
+       country_code = base::UTF16ToUTF8(s.ColumnString16(1));
+diff -up chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc.no_matching_constructor chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc
+--- chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc.no_matching_constructor	2023-11-29 22:39:58.000000000 +0100
++++ chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -630,7 +630,7 @@ void PasswordManager::OnUserModifiedNonP
+   // |driver| might be empty on iOS or in tests.
+   int driver_id = driver ? driver->GetId() : 0;
+   possible_usernames_.Put(
+-      PossibleUsernameFieldIdentifier(driver_id, renderer_id),
++      PossibleUsernameFieldIdentifier{driver_id, renderer_id},
+       PossibleUsernameData(GetSignonRealm(driver->GetLastCommittedURL()),
+                            renderer_id, value, base::Time::Now(), driver_id,
+                            autocomplete_attribute_has_username, is_likely_otp));
+diff -up chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
+--- chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -1567,7 +1567,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOut
  
        // Issue readbacks from the surfaces:
        for (size_t i = 0; i < CopyOutputResult::kNV12MaxPlanes; ++i) {
@@ -115,10 +270,10 @@ diff -up chromium-119.0.6045.59/components/viz/service/display_embedder/skia_out
          SkImageInfo dst_info = SkImageInfo::Make(
              size, (i == 0) ? kAlpha_8_SkColorType : kR8G8_unorm_SkColorType,
              kUnpremul_SkAlphaType);
-diff -up chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matching_constructor chromium-119.0.6045.59/content/browser/download/save_package.cc
---- chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/content/browser/download/save_package.cc	2023-10-30 16:51:02.271151512 +0100
-@@ -769,8 +769,8 @@ void SavePackage::Finish() {
+diff -up chromium-120.0.6099.56/content/browser/download/save_package.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/download/save_package.cc
+--- chromium-120.0.6099.56/content/browser/download/save_package.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/download/save_package.cc	2023-12-03 17:31:25.752420265 +0100
+@@ -767,8 +767,8 @@ void SavePackage::Finish() {
    if (download_) {
      std::vector<download::DownloadSaveItemData::ItemInfo> files;
      for (auto& item : saved_success_items_) {
@@ -129,52 +284,76 @@ diff -up chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matc
      }
      download::DownloadSaveItemData::AttachItemData(download_, std::move(files));
    }
-diff -up chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc
---- chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc	2023-10-30 17:38:09.351389984 +0100
-@@ -8567,7 +8567,7 @@ void RenderFrameHostImpl::SendFencedFram
+diff -up chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc
+--- chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc	2023-12-03 17:31:25.752420265 +0100
+@@ -3002,10 +3002,10 @@ DoGetKAnonymityData(sql::Database& db,
+ 
+   std::vector<StorageInterestGroup::KAnonymityData> k_anon_data;
+   while (interest_group_kanon_query.Step()) {
+-    k_anon_data.emplace_back(
++    k_anon_data.emplace_back() = {
+         /*key=*/interest_group_kanon_query.ColumnString(0),
+         /*is_k_anonymous=*/interest_group_kanon_query.ColumnBool(1),
+-        /*last_updated=*/interest_group_kanon_query.ColumnTime(2));
++        /*last_updated=*/interest_group_kanon_query.ColumnTime(2)};
+   }
+   if (!interest_group_kanon_query.Succeeded()) {
+     return absl::nullopt;
+diff -up chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc
+--- chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc	2023-12-03 20:49:28.059042672 +0100
+@@ -8685,7 +8685,7 @@ void RenderFrameHostImpl::SendFencedFram
    for (const blink::FencedFrame::ReportingDestination& destination :
         destinations) {
      SendFencedFrameReportingBeaconInternal(
 -        DestinationEnumEvent(event_type, event_data), destination,
 +        DestinationEnumEvent{event_type, event_data}, destination,
-         /*from_renderer=*/true, attribution_reporting_runtime_features,
-         GetFrameTreeNodeId());
+         /*from_renderer=*/true, attribution_reporting_runtime_features);
    }
-@@ -8603,7 +8603,7 @@ void RenderFrameHostImpl::SendFencedFram
+ }
+@@ -8720,7 +8720,7 @@ void RenderFrameHostImpl::SendFencedFram
    }
  
    SendFencedFrameReportingBeaconInternal(
 -      DestinationURLEvent(destination_url),
 +      DestinationURLEvent{destination_url},
        blink::FencedFrame::ReportingDestination::kBuyer,
-       /*from_renderer=*/true, attribution_reporting_runtime_features,
-       GetFrameTreeNodeId());
-@@ -8703,8 +8703,8 @@ void RenderFrameHostImpl::MaybeSendFence
+       /*from_renderer=*/true, attribution_reporting_runtime_features);
+ }
+@@ -8820,7 +8820,7 @@ void RenderFrameHostImpl::MaybeSendFence
          data = info->data;
        }
        initiator_rfh->SendFencedFrameReportingBeaconInternal(
--          DestinationEnumEvent(blink::kFencedFrameTopNavigationBeaconType,
--                               data),
-+          DestinationEnumEvent{blink::kFencedFrameTopNavigationBeaconType,
-+                               data},
-           destination,
+-          AutomaticBeaconEvent(event_type, data), destination,
++          AutomaticBeaconEvent{event_type, data}, destination,
            /*from_renderer=*/false, attribution_reporting_features,
-           GetFrameTreeNodeId(), navigation_request.GetNavigationId());
-@@ -8717,8 +8717,8 @@ void RenderFrameHostImpl::MaybeSendFence
+           navigation_request.GetNavigationId());
+     }
+@@ -8832,7 +8832,7 @@ void RenderFrameHostImpl::MaybeSendFence
      for (blink::FencedFrame::ReportingDestination destination :
           info->destinations) {
        initiator_rfh->SendFencedFrameReportingBeaconInternal(
--          DestinationEnumEvent(blink::kFencedFrameTopNavigationBeaconType,
--                               info->data),
-+          DestinationEnumEvent{blink::kFencedFrameTopNavigationBeaconType,
-+                               info->data},
-           destination,
+-          AutomaticBeaconEvent(event_type, info->data), destination,
++          AutomaticBeaconEvent{event_type, info->data}, destination,
            /*from_renderer=*/false, info->attribution_reporting_runtime_features,
-           GetFrameTreeNodeId(), navigation_request.GetNavigationId());
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h
---- chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor	2023-10-26 18:17:24.000000000 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h	2023-10-30 16:51:02.262151288 +0100
+           navigation_request.GetNavigationId());
+     }
+diff -up chromium-120.0.6099.56/net/dns/host_resolver_cache.cc.no_matching_constructor chromium-120.0.6099.56/net/dns/host_resolver_cache.cc
+--- chromium-120.0.6099.56/net/dns/host_resolver_cache.cc.no_matching_constructor	2023-11-29 22:40:07.000000000 +0100
++++ chromium-120.0.6099.56/net/dns/host_resolver_cache.cc	2023-12-03 17:31:25.754420303 +0100
+@@ -368,7 +368,7 @@ void HostResolverCache::Set(
+ 
+   std::string domain_name = result->domain_name();
+   entries_.emplace(
+-      Key(std::move(domain_name), network_anonymization_key),
++      Key{std::move(domain_name), network_anonymization_key},
+       Entry(std::move(result), source, secure, staleness_generation));
+ 
+   if (entries_.size() > max_entries_) {
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h
+--- chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor	2023-11-29 22:40:12.000000000 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h	2023-12-03 17:31:25.754420303 +0100
 @@ -96,7 +96,7 @@ class PLATFORM_EXPORT FontPalette : publ
        Color::ColorSpace color_interpolation_space,
        absl::optional<Color::HueInterpolationMethod> hue_interpolation_method) {
@@ -193,9 +372,9 @@ diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_p
    }
  
    double GetAlphaMultiplier() const {
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
---- chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor	2023-10-26 18:17:24.000000000 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc	2023-10-30 16:51:02.261151263 +0100
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
+--- chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor	2023-11-29 22:40:12.000000000 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc	2023-12-03 17:31:25.755420323 +0100
 @@ -31,7 +31,7 @@ Vector<FontPalette::FontPaletteOverride>
          color_interpolation_space, hue_interpolation_method, start_color,
          end_color, percentage, alpha_multiplier);
@@ -205,113 +384,22 @@ diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palett
      result_color_records.push_back(result_color_record);
    }
    return result_color_records;
-diff -up chromium-119.0.6045.59/ui/gtk/gtk_ui.cc.no_matching_constructor chromium-119.0.6045.59/ui/gtk/gtk_ui.cc
---- chromium-119.0.6045.59/ui/gtk/gtk_ui.cc.no_matching_constructor	2023-10-26 18:18:14.000000000 +0200
-+++ chromium-119.0.6045.59/ui/gtk/gtk_ui.cc	2023-10-30 16:51:02.272151537 +0100
-@@ -993,11 +993,11 @@ ui::DisplayConfig GtkUi::GetDisplayConfi
-     GdkRectangle geometry;
-     gdk_monitor_get_geometry(monitor, &geometry);
-     int monitor_scale = std::max(1, gdk_monitor_get_scale_factor(monitor));
--    config.display_geometries.emplace_back(
-+    config.display_geometries.emplace_back() = {
-         gfx::Rect(monitor_scale * geometry.x, monitor_scale * geometry.y,
-                   monitor_scale * geometry.width,
-                   monitor_scale * geometry.height),
--        monitor_scale * font_scale);
-+        static_cast<float>(monitor_scale * font_scale)};
-   }
-   return config;
- }
-diff -up chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc.me chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc
---- chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc.me	2023-10-31 18:14:49.275728099 +0100
-+++ chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc	2023-10-31 18:19:54.599223239 +0100
-@@ -221,13 +221,13 @@ PersistentSparseHistogramDataManager::Lo
-     // The sample-record could be for any sparse histogram. Add the reference
-     // to the appropriate collection for later use.
-     if (found_id == match_id) {
--      found_records.emplace_back(ref, value);
-+      found_records.emplace_back() = {ref, value};
-       found = true;
+diff -up chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp.no_matching_constructor chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp
+--- chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp.no_matching_constructor	2023-11-29 22:41:46.000000000 +0100
++++ chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp	2023-12-03 17:31:25.756420342 +0100
+@@ -491,7 +491,7 @@ void CPDF_RenderStatus::ProcessClipPath(
      } else {
-       std::vector<ReferenceAndSample>* samples =
-           GetSampleMapRecordsWhileLocked(found_id);
-       CHECK(samples);
--      samples->emplace_back(ref, value);
-+      samples->emplace_back() = {ref, value};
+       m_pDevice->SetClip_PathFill(
+           *pPath, &mtObj2Device,
+-          CFX_FillRenderOptions(ClipPath.GetClipType(i)));
++          CFX_FillRenderOptions{ClipPath.GetClipType(i)});
      }
    }
  
-diff -up chromium-119.0.6045.59/net/dns/host_resolver_cache.cc.me chromium-119.0.6045.59/net/dns/host_resolver_cache.cc
---- chromium-119.0.6045.59/net/dns/host_resolver_cache.cc.me	2023-10-31 20:48:19.153868338 +0100
-+++ chromium-119.0.6045.59/net/dns/host_resolver_cache.cc	2023-10-31 20:51:37.634526549 +0100
-@@ -368,7 +368,7 @@ void HostResolverCache::Set(
- 
-   std::string domain_name = result->domain_name();
-   entries_.emplace(
--      Key(std::move(domain_name), network_anonymization_key),
-+      Key{std::move(domain_name), network_anonymization_key},
-       Entry(std::move(result), source, secure, staleness_generation));
- 
-   if (entries_.size() > max_entries_) {
-diff -up chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc.me chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc
---- chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc.me	2023-10-31 22:32:58.995997897 +0100
-+++ chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc	2023-10-31 22:33:28.290520601 +0100
-@@ -1733,10 +1733,10 @@ std::unique_ptr<AutofillProfile> Autofil
-     }
- 
-     base::span<const uint8_t> observations_data = s.ColumnBlob(3);
--    field_type_values.emplace_back(
-+    field_type_values.emplace_back() = {
-         type, s.ColumnString16(1), s.ColumnInt(2),
-         std::vector<uint8_t>(observations_data.begin(),
--                             observations_data.end()));
-+                             observations_data.end())};
- 
-     if (type == ADDRESS_HOME_COUNTRY) {
-       country_code = base::UTF16ToUTF8(s.ColumnString16(1));
-diff -up chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc.than chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc
---- chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc.than	2023-10-31 22:41:22.850233005 +0100
-+++ chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc	2023-10-31 22:42:37.276931933 +0100
-@@ -625,7 +625,7 @@ void PasswordManager::OnUserModifiedNonP
-   // |driver| might be empty on iOS or in tests.
-   int driver_id = driver ? driver->GetId() : 0;
-   possible_usernames_.Put(
--      PossibleUsernameFieldIdentifier(driver_id, renderer_id),
-+      PossibleUsernameFieldIdentifier{driver_id, renderer_id},
-       PossibleUsernameData(GetSignonRealm(driver->GetLastCommittedURL()),
-                            renderer_id, value, base::Time::Now(), driver_id,
-                            autocomplete_attribute_has_username, is_likely_otp));
-diff -up chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc.than chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc
---- chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc.than	2023-10-31 23:31:08.438267908 +0100
-+++ chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc	2023-10-31 23:32:08.979358711 +0100
-@@ -2854,10 +2854,10 @@ DoGetKAnonymityData(sql::Database& db,
- 
-   std::vector<StorageInterestGroup::KAnonymityData> k_anon_data;
-   while (interest_group_kanon_query.Step()) {
--    k_anon_data.emplace_back(
-+    k_anon_data.emplace_back() = {
-         /*key=*/interest_group_kanon_query.ColumnString(0),
-         /*is_k_anonymous=*/interest_group_kanon_query.ColumnBool(1),
--        /*last_updated=*/interest_group_kanon_query.ColumnTime(2));
-+        /*last_updated=*/interest_group_kanon_query.ColumnTime(2)};
-   }
-   if (!interest_group_kanon_query.Succeeded()) {
-     return absl::nullopt;
-diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc.than chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc
---- chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc.than	2023-11-01 11:19:42.745395797 +0100
-+++ chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc	2023-11-01 11:22:16.670920679 +0100
-@@ -1881,7 +1881,7 @@ void FederatedAuthRequestImpl::ShowError
-       base::BindOnce(&FederatedAuthRequestImpl::CompleteRequestWithError,
-                      weak_ptr_factory_.GetWeakPtr()));
-   absl::optional<TokenError> token_error =
--      error ? absl::make_optional<TokenError>(error->code, error->url)
-+      error ? absl::make_optional<TokenError>({error->code, error->url})
-             : absl::nullopt;
- 
-   // TODO(crbug.com/1485710): Refactor IdentityCredentialTokenError
---- chromium-119.0.6045.59/ui/base/wayland/color_manager_util.h.no_matching_constructor	2023-10-26 18:18:14.000000000 +0200
-+++ chromium-119.0.6045.59/ui/base/wayland/color_manager_util.h	2023-11-01 17:29:54.269820415 +0100
-@@ -52,53 +52,53 @@
+diff -up chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h.no_matching_constructor chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h
+--- chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h.no_matching_constructor	2023-11-29 22:40:44.000000000 +0100
++++ chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h	2023-12-03 17:31:25.755420323 +0100
+@@ -52,53 +52,53 @@ constexpr auto kChromaticityMap = base::
      zcr_color_manager_v1_chromaticity_names,
      PrimaryVersion>(
      {{ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT601_525_LINE,
@@ -391,7 +479,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  
  // A map from the zcr_color_manager_v1 eotf_names enum values
  // representing well-known EOTFs, to their equivalent TransferIDs.
-@@ -107,68 +107,68 @@
+@@ -107,68 +107,68 @@ constexpr auto kEotfMap = base::MakeFixe
      zcr_color_manager_v1_eotf_names,
      TransferVersion>({
      {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -498,7 +586,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  });
  
  // A map from the SDR zcr_color_manager_v1 eotf_names enum values
-@@ -177,18 +177,18 @@
+@@ -177,18 +177,18 @@ constexpr auto kEotfMap = base::MakeFixe
  constexpr auto kTransferMap =
      base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>({
          {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -524,7 +612,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
      });
  
  // A map from the HDR zcr_color_manager_v1 eotf_names enum values
-@@ -197,70 +197,70 @@
+@@ -197,70 +197,70 @@ constexpr auto kTransferMap =
  constexpr auto kHDRTransferMap =
      base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>(
          {{ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -628,76 +716,27 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  
  zcr_color_manager_v1_chromaticity_names ToColorManagerChromaticity(
      gfx::ColorSpace::PrimaryID primaryID,
-@@ -283,4 +283,4 @@
+@@ -283,4 +283,4 @@ zcr_color_manager_v1_eotf_names ToColorM
  
  }  // namespace ui::wayland
  
 -#endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
 \ Kein Zeilenumbruch am Dateiende.
 +#endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.me chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.me	2023-11-01 20:46:15.997861278 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc	2023-11-01 20:49:33.603371680 +0100
-@@ -58,13 +58,13 @@ EmbeddedPermissionPromptPreviouslyGrante
- std::vector<EmbeddedPermissionPromptPreviouslyGrantedView::ButtonConfiguration>
- EmbeddedPermissionPromptPreviouslyGrantedView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
--  buttons.emplace_back(
-+  buttons.emplace_back() = {
-       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_ALLOWING),
--      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal);
-+      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal};
- 
--  buttons.emplace_back(
-+  buttons.emplace_back() = {
-       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_STOP_ALLOWING),
--      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal);
-+      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal};
-   return buttons;
- }
- 
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.than chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.than	2023-11-01 20:52:29.005464494 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc	2023-11-01 21:14:12.741859604 +0100
-@@ -56,12 +56,12 @@ std::vector<EmbeddedPermissionPromptAskV
- EmbeddedPermissionPromptAskView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
-   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
--    buttons.emplace_back(
-+    buttons.emplace_back() = {
-         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
--        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
-+        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+diff -up chromium-120.0.6099.56/ui/gtk/gtk_ui.cc.no_matching_constructor chromium-120.0.6099.56/ui/gtk/gtk_ui.cc
+--- chromium-120.0.6099.56/ui/gtk/gtk_ui.cc.no_matching_constructor	2023-11-29 22:40:44.000000000 +0100
++++ chromium-120.0.6099.56/ui/gtk/gtk_ui.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -1013,11 +1013,11 @@ ui::DisplayConfig GtkUi::GetDisplayConfi
+     GdkRectangle geometry;
+     gdk_monitor_get_geometry(monitor, &geometry);
+     int monitor_scale = std::max(1, gdk_monitor_get_scale_factor(monitor));
+-    config.display_geometries.emplace_back(
++    config.display_geometries.emplace_back() = {
+         gfx::Rect(monitor_scale * geometry.x, monitor_scale * geometry.y,
+                   monitor_scale * geometry.width,
+                   monitor_scale * geometry.height),
+-        monitor_scale * font_scale);
++        static_cast<float>(monitor_scale * font_scale)};
    }
--  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
--                       ButtonType::kAllow, ui::ButtonStyle::kTonal);
-+  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
-+                       ButtonType::kAllow, ui::ButtonStyle::kTonal};
-   return buttons;
- }
- 
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.me chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.me	2023-11-01 21:22:02.222646903 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h	2023-11-01 21:19:58.769619393 +0100
-@@ -72,6 +72,7 @@ class EmbeddedPermissionPromptBaseView :
-   struct RequestLineConfiguration {
-     const raw_ptr<const gfx::VectorIcon> icon;
-     std::u16string message;
-+    RequestLineConfiguration(auto i, auto m) : icon(i), message(m) { }
-   };
- 
-   struct ButtonConfiguration {
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.than chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.than	2023-11-01 21:25:31.118626473 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc	2023-11-01 21:30:06.383340274 +0100
-@@ -48,8 +48,8 @@ EmbeddedPermissionPromptPolicyView::GetR
- std::vector<EmbeddedPermissionPromptPolicyView::ButtonConfiguration>
- EmbeddedPermissionPromptPolicyView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
--  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
--                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal);
-+  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
-+                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal};
-   return buttons;
+   return config;
  }
- 
diff --git a/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch b/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
new file mode 100644
index 0000000000000..e80ed715aaf29
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
@@ -0,0 +1,28 @@
+diff -up chromium-120.0.6099.35/build/config/compiler/BUILD.gn.than chromium-120.0.6099.35/build/config/compiler/BUILD.gn
+--- chromium-120.0.6099.35/build/config/compiler/BUILD.gn.than	2023-11-26 17:02:25.647022746 +0100
++++ chromium-120.0.6099.35/build/config/compiler/BUILD.gn	2023-11-26 17:15:58.025585358 +0100
+@@ -616,24 +616,6 @@ config("compiler") {
+       }
+     }
+ 
+-    # TODO(crbug.com/1488374): This causes binary size growth and potentially
+-    # other problems.
+-    # TODO(crbug.com/1491036): This isn't supported by Cronet's mainline llvm version.
+-    if (default_toolchain != "//build/toolchain/cros:target" &&
+-        !llvm_android_mainline) {
+-      cflags += [
+-        "-mllvm",
+-        "-split-threshold-for-reg-with-hint=0",
+-      ]
+-      if (use_thin_lto && is_a_target_toolchain) {
+-        if (is_win) {
+-          ldflags += [ "-mllvm:-split-threshold-for-reg-with-hint=0" ]
+-        } else {
+-          ldflags += [ "-Wl,-mllvm,-split-threshold-for-reg-with-hint=0" ]
+-        }
+-      }
+-    }
+-
+     # TODO(crbug.com/1235145): Investigate why/if this should be needed.
+     if (is_win) {
+       cflags += [ "/clang:-ffp-contract=off" ]
diff --git a/srcpkgs/chromium/patches/chromium-117-typename.patch b/srcpkgs/chromium/patches/chromium-120-typename.patch
similarity index 83%
rename from srcpkgs/chromium/patches/chromium-117-typename.patch
rename to srcpkgs/chromium/patches/chromium-120-typename.patch
index d3b00e7323603..9a2d878b12b54 100644
--- a/srcpkgs/chromium/patches/chromium-117-typename.patch
+++ b/srcpkgs/chromium/patches/chromium-120-typename.patch
@@ -1,3 +1,23 @@
+--- chromium-120.0.6099.56/base/containers/map_util.h.me	2023-12-02 19:00:19.696801563 +0100
++++ chromium-120.0.6099.56/base/containers/map_util.h	2023-12-02 19:00:47.049337547 +0100
+@@ -42,7 +42,7 @@
+ template <typename Map,
+           typename Key,
+           typename MappedElementType =
+-              std::pointer_traits<internal::MappedType<Map>>::element_type>
++              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
+ constexpr const MappedElementType* FindPtrOrNull(const Map& map,
+                                                  const Key& key) {
+   auto it = map.find(key);
+@@ -58,7 +58,7 @@
+ template <typename Map,
+           typename Key,
+           typename MappedElementType =
+-              std::pointer_traits<internal::MappedType<Map>>::element_type>
++              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
+ constexpr MappedElementType* FindPtrOrNull(Map& map, const Key& key) {
+   auto it = map.find(key);
+   return it != map.end() ? std::to_address(it->second) : nullptr;
 diff -up chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc.me chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc
 --- chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc.me	2023-06-17 14:50:56.342591702 +0200
 +++ chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc	2023-06-17 14:57:48.024377375 +0200
@@ -162,3 +182,24 @@ diff -up chromium-117.0.5938.62/components/supervised_user/core/browser/proto_fe
  
    // Remove fetcher under key from requests_in_flight_.
    void Remove(KeyType key);
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h.me chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h
+--- chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h.me	2023-12-04 00:29:35.197209538 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h	2023-12-04 00:30:24.436233249 +0100
+@@ -220,7 +220,7 @@ class PairAsyncIterable {
+  private:
+   virtual IterationSource* CreateIterationSource(
+       ScriptState* script_state,
+-      IterationSource::Kind kind,
++      typename IterationSource::Kind kind,
+       ExceptionState& exception_state) = 0;
+ };
+ 
+@@ -262,7 +262,7 @@ class ValueAsyncIterable {
+  private:
+   virtual IterationSource* CreateIterationSource(
+       ScriptState* script_state,
+-      IterationSource::Kind kind,
++      typename IterationSource::Kind kind,
+       ExceptionState& exception_state) = 0;
+ };
+ 
diff --git a/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch b/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
new file mode 100644
index 0000000000000..b06e29f29047a
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
@@ -0,0 +1,51 @@
+diff -up chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc
+--- chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:37.000000000 +0200
++++ chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc	2023-06-17 16:53:20.216628557 +0200
+@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui
+ void CdmPromiseAdapter::Clear(ClearReason reason) {
+   // Reject all outstanding promises.
+   DCHECK(thread_checker_.CalledOnValidThread());
+-  for (auto& [promise_id, promise] : promises_) {
++  for (auto& [p_i, p_e] : promises_) {
++    auto& promise_id = p_i;
++    auto& promise = p_e;
+     TRACE_EVENT_NESTABLE_ASYNC_END1(
+         "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id),
+         "status", "cleared");
+diff -up chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc
+--- chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me	2023-06-19 08:04:02.287072722 +0200
++++ chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc	2023-06-19 08:18:24.576814950 +0200
+@@ -1393,7 +1393,8 @@ void ServiceWorkerContextWrapper::MaybeP
+     return;
+   }
+ 
+-  auto [document_url, key, callback] = std::move(*request);
++  auto [d_u, key, callback] = std::move(*request);
++  auto document_url = d_u;
+ 
+   DCHECK(document_url.is_valid());
+   TRACE_EVENT1("ServiceWorker",
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc.me chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
+--- chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc.me	2023-12-03 22:17:50.922083200 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc	2023-12-03 22:22:55.437484343 +0100
+@@ -3447,7 +3447,8 @@ void GridLayoutAlgorithm::PlaceGridItems
+   DCHECK(out_row_break_between);
+ 
+   const auto& container_space = ConstraintSpace();
+-  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
++  const auto& [grid_items, l_d, tree_size] = sizing_tree.TreeRootData();
++  const auto& layout_data = l_d;
+ 
+   const auto* cached_layout_subtree = container_space.GetGridLayoutSubtree();
+   const auto container_writing_direction =
+@@ -3611,7 +3612,9 @@ void GridLayoutAlgorithm::PlaceGridItems
+ 
+   // TODO(ikilpatrick): Update |SetHasSeenAllChildren| and early exit if true.
+   const auto& constraint_space = ConstraintSpace();
+-  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
++  const auto& [g_i, l_d, tree_size] = sizing_tree.TreeRootData();
++  const auto& grid_items = g_i;
++  const auto& layout_data = l_d;
+ 
+   const auto* cached_layout_subtree = constraint_space.GetGridLayoutSubtree();
+   const auto container_writing_direction =
diff --git a/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch b/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
index afcdae179850a..b3dd2c33f0f21 100644
--- a/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
+++ b/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
@@ -1,5 +1,5 @@
---- a/base/allocator/partition_allocator/tagging.cc
-+++ b/base/allocator/partition_allocator/tagging.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/tagging.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/tagging.cc
 @@ -28,13 +28,25 @@
  #endif
  #endif
diff --git a/srcpkgs/chromium/patches/musl-no-execinfo.patch b/srcpkgs/chromium/patches/musl-no-execinfo.patch
index fac2b6d190e78..7407f1b9db38a 100644
--- a/srcpkgs/chromium/patches/musl-no-execinfo.patch
+++ b/srcpkgs/chromium/patches/musl-no-execinfo.patch
@@ -83,12 +83,3 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1
  // StackTrace::OutputToStream() is not implemented under uclibc, nor AIX.
  // See https://crbug.com/706728
  
-@@ -156,7 +156,7 @@
- 
- #endif  // !defined(__UCLIBC__) && !defined(_AIX)
- 
--#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID)
-+#if (BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !BUILDFLAG(IS_ANDROID)
- #if !BUILDFLAG(IS_IOS)
- static char* newArray() {
-   // Clang warns about the mismatched new[]/delete if they occur in the same
diff --git a/srcpkgs/chromium/patches/musl-no-mallinfo.patch b/srcpkgs/chromium/patches/musl-no-mallinfo.patch
index cd728ecfb112d..a58ee08a435a0 100644
--- a/srcpkgs/chromium/patches/musl-no-mallinfo.patch
+++ b/srcpkgs/chromium/patches/musl-no-mallinfo.patch
@@ -101,8 +101,8 @@ musl does not implement mallinfo()/mallinfo2()
  
  /* Define to 1 if you have the <malloc.h> header file. */
  #define HAVE_MALLOC_H 1
---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
-+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
 @@ -717,7 +717,7 @@
  
  #endif  // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID)
@@ -112,8 +112,8 @@ musl does not implement mallinfo()/mallinfo2()
  SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW {
    base::SimplePartitionStatsDumper allocator_dumper;
    Allocator()->DumpStats("malloc", true, &allocator_dumper);
---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
-+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
 @@ -24,7 +24,7 @@
  #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
  
diff --git a/srcpkgs/chromium/patches/musl-partition-atfork.patch b/srcpkgs/chromium/patches/musl-partition-atfork.patch
index 2910aa2bbf9b1..35d810055fbb5 100644
--- a/srcpkgs/chromium/patches/musl-partition-atfork.patch
+++ b/srcpkgs/chromium/patches/musl-partition-atfork.patch
@@ -1,5 +1,5 @@
---- a/base/allocator/partition_allocator/partition_root.cc
-+++ b/base/allocator/partition_allocator/partition_root.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc
 @@ -239,7 +239,7 @@
    if (!g_global_init_called.compare_exchange_strong(expected, true))
      return;
diff --git a/srcpkgs/chromium/patches/no-mte.patch b/srcpkgs/chromium/patches/no-mte.patch
deleted file mode 100644
index 56167e1e5c576..0000000000000
--- a/srcpkgs/chromium/patches/no-mte.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/base/allocator/partition_allocator/partition_alloc_config.h
-+++ b/base/allocator/partition_allocator/partition_alloc_config.h
-@@ -153,7 +153,7 @@
-    defined(ARCH_CPU_LITTLE_ENDIAN))
- 
- #define PA_CONFIG_HAS_MEMORY_TAGGING()              \
--  (defined(ARCH_CPU_ARM64) && defined(__clang__) && \
-+  (0 && defined(ARCH_CPU_ARM64) && defined(__clang__) && \
-    !defined(ADDRESS_SANITIZER) &&                   \
-    (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
- 
diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index b023946f3ec7b..d10cfb28144e3 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -1,8 +1,8 @@
 # Template file for 'chromium'
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
-version=119.0.6045.105
-revision=3
+version=120.0.6099.109
+revision=1
 archs="i686* x86_64* aarch64* armv7l*"
 hostmakedepends="
  $(vopt_if clang "clang lld llvm15")
@@ -10,12 +10,12 @@ hostmakedepends="
  libepoxy-devel libevent-devel libglib-devel"
 makedepends="
  alsa-lib-devel libdav1d-devel brotli-devel cups-devel elfutils-devel ffmpeg-devel
- fontconfig-devel freetype-devel gtk+3-devel jsoncpp-devel libXScrnSaver-devel
+ fontconfig-devel freetype-devel gtk+3-devel libXScrnSaver-devel
  libXcomposite-devel libXcursor-devel libXdamage-devel libXi-devel libXrandr-devel
  libavif-devel libcap-devel libcurl-devel libdrm-devel libevent-devel
  libexif-devel libflac-devel libgcrypt-devel libjpeg-turbo-devel libmtp-devel
  libpng-devel libva-devel libwebp-devel libxml2-devel libxshmfence-devel
- libxslt-devel woff2-devel minizip-devel mit-krb5-devel nss-devel opus-devel
+ libxslt-devel minizip-devel mit-krb5-devel nss-devel opus-devel
  pciutils-devel snappy-devel speech-dispatcher-devel speex-devel
  xcb-proto zlib-devel libaom-devel libffi-devel libevdev-devel
  $(vopt_if pipewire pipewire-devel)
@@ -27,7 +27,7 @@ maintainer="Duncaen <duncaen@voidlinux.org>"
 license="BSD-3-Clause"
 homepage="https://www.chromium.org/"
 distfiles="https://commondatastorage.googleapis.com/chromium-browser-official/${pkgname}-${version}.tar.xz"
-checksum=73cb8c39e928f8c627d747d37a3b020f08913ef5508f893758d70bdbd545dbcf
+checksum=87c00c525ee07c2233b78dbece1496b697f686244a67fac2c71e4a30bd96849b
 
 lib32disabled=yes
 
@@ -52,7 +52,7 @@ if [ "$CROSS_BUILD" ]; then
 	 $(vopt_if pipewire pipewire-devel) ffmpeg-devel opus-devel pango-devel libva-devel
 	 libcurl-devel snappy-devel libXrandr-devel libXcomposite-devel cups-devel
 	 mit-krb5-devel alsa-lib-devel libXdamage-devel libepoxy-devel libevdev-devel
-	 libavif-devel libaom-devel jsoncpp-devel woff2-devel libdav1d-devel libflac-devel
+	 libavif-devel libaom-devel libdav1d-devel libflac-devel
 	 libdrm-devel libgbm-devel"
 fi
 
@@ -82,6 +82,9 @@ post_patch() {
 	# allow system dependencies in "official builds"
 	vsed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \
 		tools/generate_shim_headers/generate_shim_headers.py
+
+	mkdir -p third_party/node/linux/node-linux-x64/bin
+	ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/
 }
 
 _setup_clang() {
@@ -144,6 +147,8 @@ do_configure() {
 	# use_system_v8=1
 	# bzip2 xdg_utils speex
 	# XXX: harfbuzz-ng use builtin one until system-wide is updated >=3.0.0
+	# libcxx https://github.com/llvm/llvm-project/issues/61705:
+	# snappy
 	system="
 		ffmpeg
 		flac
@@ -157,7 +162,6 @@ do_configure() {
 		libxml
 		libxslt
 		opus
-		snappy
 	"
 
 	# remove build scripts for system provided dependencies - basically does the
@@ -192,7 +196,7 @@ do_configure() {
 		'clang_base_path="/usr"'
 
 		"gold_path=\"${XBPS_CROSS_BASE}/usr/bin/ld.gold\""
-		'use_custom_libcxx=false'
+		'use_custom_libcxx=true' # https://github.com/llvm/llvm-project/issues/61705
 		'use_gold=false'
 
 		'rust_sysroot_absolute="/usr"'
@@ -304,7 +308,6 @@ do_install() {
 	vmkdir usr/lib/chromium/locales
 	vcopy "out/Release/locales/*.pak" usr/lib/chromium/locales
 
-	vinstall ${FILESDIR}/chromium.desktop 644 usr/share/applications
 
 	vinstall out/Release/icudtl.dat 0644 usr/lib/chromium
 
@@ -322,4 +325,14 @@ do_install() {
 	vbin ${FILESDIR}/chromium.sh chromium
 	vlicense LICENSE
 	ln -sf /usr/lib/chromium/chromedriver ${DESTDIR}/usr/bin/chromedriver
+
+	vinstall chrome/installer/linux/common/desktop.template 644 usr/share/applications chromium.desktop
+	vinstall chrome/app/resources/manpage.1.in 644 usr/share/man/man1 chromium.1
+
+	sed -i \
+		-e 's/@@MENUNAME@@/Chromium/g' \
+		-e 's/@@PACKAGE@@/chromium/g' \
+		-e 's/@@USR_BIN_SYMLINK_NAME@@/chromium/g' \
+		${DESTDIR}/usr/share/man/man1/chromium.1 \
+		${DESTDIR}/usr/share/applications/chromium.desktop
 }
diff --git a/srcpkgs/chromium/update b/srcpkgs/chromium/update
index c035a8fe1c3b3..af42867275488 100644
--- a/srcpkgs/chromium/update
+++ b/srcpkgs/chromium/update
@@ -1,2 +1,2 @@
-site='https://omahaproxy.appspot.com/all'
-pattern='linux,stable,\K[^,]*'
+site='https://chromiumdash.appspot.com/fetch_releases?channel=Stable&platform=Linux&num=1&offset=0'
+pattern='"version":\s*"\K[^,]+(?=")'

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PR PATCH] [Updated] chromium: update to 120.0.6099.109.
  2023-12-13 17:44 [PR PATCH] chromium: update to 120.0.6099.109 Duncaen
  2023-12-13 17:59 ` [PR PATCH] [Updated] " Duncaen
  2023-12-13 18:06 ` Duncaen
@ 2023-12-13 18:13 ` Duncaen
  2023-12-13 23:44 ` Duncaen
  2023-12-14 23:13 ` [PR PATCH] [Merged]: " Duncaen
  4 siblings, 0 replies; 6+ messages in thread
From: Duncaen @ 2023-12-13 18:13 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 412 bytes --]

There is an updated pull request by Duncaen against master on the void-packages repository

https://github.com/Duncaen/void-packages chromium-120
https://github.com/void-linux/void-packages/pull/47739

chromium: update to 120.0.6099.109.
[ci skip]

* [x] x86_64-glibc
* [ ] x86_64-musl
* [ ] aarch64-musl
* [ ] i686

A patch file from https://github.com/void-linux/void-packages/pull/47739.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-chromium-120-47739.patch --]
[-- Type: text/x-diff, Size: 125163 bytes --]

From 36167435415f24c2c6d42165076e066f89abb4ea Mon Sep 17 00:00:00 2001
From: Duncaen <duncaen@voidlinux.org>
Date: Wed, 13 Dec 2023 14:53:36 +0100
Subject: [PATCH] chromium: update to 120.0.6099.109.

---
 srcpkgs/chromium/files/chromium.desktop       | 112 ----
 .../files/musl-patches/libc++-musl.patch      |  12 +
 .../chromium-118-python-3.12-deprecated.patch | 138 -----
 ...karound_clang_bug-structured_binding.patch |  96 ----
 .../patches/chromium-119-constexpr.patch      |  12 -
 ...tVideoDecoder-flag-on-VA-API-devices.patch | 195 -------
 ...-119-nullptr_t-without-namespace-std.patch |  21 -
 ...a-use-separate-bo-to-verify-modifier.patch | 164 ------
 .../chromium-120-arm64-memory_tagging.patch   |  14 +
 ...hromium-120-disable-FFmpegAllowLists.patch |  12 +
 ...ble-GlobalMediaControlsCastStartStop.patch |  14 +
 ...chromium-120-el7-clang-build-failure.patch | 230 ++++++++
 ...ium-120-el7-clang-build-failure.patch.args |   1 +
 ...romium-120-el7-clang-version-warning.patch |  16 +
 .../chromium-120-gn-workaround-atspi.patch    |  13 +
 ...> chromium-120-missing-header-files.patch} |  11 -
 ...hromium-120-no_matching_constructor.patch} | 493 ++++++++++--------
 ...20-split-threshold-for-reg-with-hint.patch |  28 +
 ...name.patch => chromium-120-typename.patch} |  41 ++
 ...karound_clang_bug-structured_binding.patch |  51 ++
 ...x-aarch64-musl-memory-tagging-macros.patch |   4 +-
 .../chromium/patches/musl-no-execinfo.patch   |   9 -
 .../chromium/patches/musl-no-mallinfo.patch   |   8 +-
 .../patches/musl-partition-atfork.patch       |   4 +-
 srcpkgs/chromium/patches/no-mte.patch         |  11 -
 srcpkgs/chromium/template                     |  31 +-
 srcpkgs/chromium/update                       |   4 +-
 27 files changed, 730 insertions(+), 1015 deletions(-)
 delete mode 100644 srcpkgs/chromium/files/chromium.desktop
 create mode 100644 srcpkgs/chromium/files/musl-patches/libc++-musl.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-constexpr.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
 rename srcpkgs/chromium/patches/{chromium-119-missing-header-files.patch => chromium-120-missing-header-files.patch} (97%)
 rename srcpkgs/chromium/patches/{chromium-119-no_matching_constructor.patch => chromium-120-no_matching_constructor.patch} (67%)
 create mode 100644 srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
 rename srcpkgs/chromium/patches/{chromium-117-typename.patch => chromium-120-typename.patch} (83%)
 create mode 100644 srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
 delete mode 100644 srcpkgs/chromium/patches/no-mte.patch

diff --git a/srcpkgs/chromium/files/chromium.desktop b/srcpkgs/chromium/files/chromium.desktop
deleted file mode 100644
index 05788f7135daa..0000000000000
--- a/srcpkgs/chromium/files/chromium.desktop
+++ /dev/null
@@ -1,112 +0,0 @@
-[Desktop Entry]
-Name=Chromium
-# Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
-# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
-GenericName=Web Browser
-GenericName[ar]=متصفح الشبكة
-GenericName[bg]=Уеб браузър
-GenericName[ca]=Navegador web
-GenericName[cs]=WWW prohlížeč
-GenericName[da]=Browser
-GenericName[de]=Web-Browser
-GenericName[el]=Περιηγητής ιστού
-GenericName[en_GB]=Web Browser
-GenericName[es]=Navegador web
-GenericName[et]=Veebibrauser
-GenericName[fi]=WWW-selain
-GenericName[fr]=Navigateur Web
-GenericName[gu]=વેબ બ્રાઉઝર
-GenericName[he]=דפדפן אינטרנט
-GenericName[hi]=वेब ब्राउज़र
-GenericName[hu]=Webböngésző
-GenericName[it]=Browser Web
-GenericName[ja]=ウェブブラウザ
-GenericName[kn]=ಜಾಲ ವೀಕ್ಷಕ
-GenericName[ko]=웹 브라우저
-GenericName[lt]=Žiniatinklio naršyklė
-GenericName[lv]=Tīmekļa pārlūks
-GenericName[ml]=വെബ് ബ്രൌസര്‍
-GenericName[mr]=वेब ब्राऊजर
-GenericName[nb]=Nettleser
-GenericName[nl]=Webbrowser
-GenericName[pl]=Przeglądarka WWW
-GenericName[pt]=Navegador Web
-GenericName[pt_BR]=Navegador da Internet
-GenericName[ro]=Navigator de Internet
-GenericName[ru]=Веб-браузер
-GenericName[sl]=Spletni brskalnik
-GenericName[sv]=Webbläsare
-GenericName[ta]=இணைய உலாவி
-GenericName[th]=เว็บเบราว์เซอร์
-GenericName[tr]=Web Tarayıcı
-GenericName[uk]=Навігатор Тенет
-GenericName[zh_CN]=网页浏览器
-GenericName[zh_HK]=網頁瀏覽器
-GenericName[zh_TW]=網頁瀏覽器
-# Not translated in KDE, from Epiphany 2.26.1-0ubuntu1.
-GenericName[bn]=ওয়েব ব্রাউজার
-GenericName[fil]=Web Browser
-GenericName[hr]=Web preglednik
-GenericName[id]=Browser Web
-GenericName[or]=ଓ୍ବେବ ବ୍ରାଉଜର
-GenericName[sk]=WWW prehliadač
-GenericName[sr]=Интернет прегледник
-GenericName[te]=మహాతల అన్వేషి
-GenericName[vi]=Bộ duyệt Web
-# Gnome and KDE 3 uses Comment.
-Comment=Access the Internet
-Comment[ar]=الدخول إلى الإنترنت
-Comment[bg]=Достъп до интернет
-Comment[bn]=ইন্টারনেটটি অ্যাক্সেস করুন
-Comment[ca]=Accedeix a Internet
-Comment[cs]=Přístup k internetu
-Comment[da]=Få adgang til internettet
-Comment[de]=Internetzugriff
-Comment[el]=Πρόσβαση στο Διαδίκτυο
-Comment[en_GB]=Access the Internet
-Comment[es]=Accede a Internet.
-Comment[et]=Pääs Internetti
-Comment[fi]=Käytä internetiä
-Comment[fil]=I-access ang Internet
-Comment[fr]=Accéder à Internet
-Comment[gu]=ઇંટરનેટ ઍક્સેસ કરો
-Comment[he]=גישה אל האינטרנט
-Comment[hi]=इंटरनेट तक पहुंच स्थापित करें
-Comment[hr]=Pristup Internetu
-Comment[hu]=Internetelérés
-Comment[id]=Akses Internet
-Comment[it]=Accesso a Internet
-Comment[ja]=インターネットにアクセス
-Comment[kn]=ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ
-Comment[ko]=인터넷 연결
-Comment[lt]=Interneto prieiga
-Comment[lv]=Piekļūt internetam
-Comment[ml]=ഇന്റര്‍‌നെറ്റ് ആക്‌സസ് ചെയ്യുക
-Comment[mr]=इंटरनेटमध्ये प्रवेश करा
-Comment[nb]=Gå til Internett
-Comment[nl]=Verbinding maken met internet
-Comment[or]=ଇଣ୍ଟର୍ନେଟ୍ ପ୍ରବେଶ କରନ୍ତୁ
-Comment[pl]=Skorzystaj z internetu
-Comment[pt]=Aceder à Internet
-Comment[pt_BR]=Acessar a internet
-Comment[ro]=Accesaţi Internetul
-Comment[ru]=Доступ в Интернет
-Comment[sk]=Prístup do siete Internet
-Comment[sl]=Dostop do interneta
-Comment[sr]=Приступите Интернету
-Comment[sv]=Gå ut på Internet
-Comment[ta]=இணையத்தை அணுகுதல்
-Comment[te]=ఇంటర్నెట్‌ను ఆక్సెస్ చెయ్యండి
-Comment[th]=เข้าถึงอินเทอร์เน็ต
-Comment[tr]=İnternet'e erişin
-Comment[uk]=Доступ до Інтернету
-Comment[vi]=Truy cập Internet
-Comment[zh_CN]=访问互联网
-Comment[zh_HK]=連線到網際網路
-Comment[zh_TW]=連線到網際網路
-Exec=chromium %U
-Terminal=false
-Icon=chromium
-Type=Application
-Categories=GTK;Network;WebBrowser;
-MimeType=text/html;text/xml;application/xhtml+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
diff --git a/srcpkgs/chromium/files/musl-patches/libc++-musl.patch b/srcpkgs/chromium/files/musl-patches/libc++-musl.patch
new file mode 100644
index 0000000000000..b90a54daa8b49
--- /dev/null
+++ b/srcpkgs/chromium/files/musl-patches/libc++-musl.patch
@@ -0,0 +1,12 @@
+Source: https://git.alpinelinux.org/aports/tree/community/chromium/yes-musl.patch
+--- ./buildtools/third_party/libc++/__config_site.orig
++++ ./buildtools/third_party/libc++/__config_site
+@@ -18,7 +18,7 @@
+ /* #undef _LIBCPP_ABI_FORCE_MICROSOFT */
+ /* #undef _LIBCPP_HAS_NO_THREADS */
+ /* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */
+-/* #undef _LIBCPP_HAS_MUSL_LIBC */
++#define _LIBCPP_HAS_MUSL_LIBC 1
+ /* #undef _LIBCPP_HAS_THREAD_API_PTHREAD */
+ /* #undef _LIBCPP_HAS_THREAD_API_EXTERNAL */
+ /* #undef _LIBCPP_HAS_THREAD_API_WIN32 */
diff --git a/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch b/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
deleted file mode 100644
index 5837ae584117d..0000000000000
--- a/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-diff -up chromium-115.0.5790.102/base/write_build_date_header.py.me chromium-115.0.5790.102/base/write_build_date_header.py
---- chromium-115.0.5790.102/base/write_build_date_header.py.me	2023-07-22 14:23:42.620679397 +0200
-+++ chromium-115.0.5790.102/base/write_build_date_header.py	2023-07-22 15:24:46.833310310 +0200
-@@ -17,7 +17,7 @@ def main():
-   args = argument_parser.parse_args()
- 
-   date_val = int(args.timestamp)
--  date = datetime.datetime.utcfromtimestamp(date_val)
-+  date =  datetime.datetime.fromtimestamp(date_val, datetime.timezone.utc)
-   output = ('// Generated by //base/write_build_date_header.py\n'
-             '#ifndef BASE_GENERATED_BUILD_DATE_TIMESTAMP \n'
-             f'#define BASE_GENERATED_BUILD_DATE_TIMESTAMP {date_val}'
-diff -up chromium-115.0.5790.102/build/write_buildflag_header.py.me chromium-115.0.5790.102/build/write_buildflag_header.py
---- chromium-115.0.5790.102/build/write_buildflag_header.py.me	2023-07-22 14:16:14.196975451 +0200
-+++ chromium-115.0.5790.102/build/write_buildflag_header.py	2023-07-22 14:20:24.977239994 +0200
-@@ -44,7 +44,7 @@ def GetOptions():
-   header_guard = cmdline_options.output.upper()
-   if header_guard[0].isdigit():
-     header_guard = '_' + header_guard
--  header_guard = re.sub('[^\w]', '_', header_guard)
-+  header_guard = re.sub(r'[^\w]', '_', header_guard)
-   header_guard += '_'
- 
-   # The actual output file is inside the gen dir.
-diff -up chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py.me chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py
---- chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py.me	2023-07-22 14:47:34.230764210 +0200
-+++ chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py	2023-07-22 15:11:50.360983383 +0200
-@@ -9,7 +9,8 @@
- """
- from __future__ import print_function
- import abc
--import imp
-+import types
-+import importlib
- import optparse
- import os
- import re
-@@ -40,6 +41,12 @@ class GoogleProtobufModuleImporter:
-         return filepath
-     return None
- 
-+  def load_source(name: str, path: str) -> types.ModuleType:
-+    spec = importlib.util.spec_from_file_location(name, path)
-+    module = importlib.util.module_from_spec(spec)
-+    spec.loader.exec_module(module)
-+    return module
-+
-   def _module_exists(self, fullname):
-     return self._fullname_to_filepath(fullname) is not None
- 
-@@ -68,7 +75,7 @@ class GoogleProtobufModuleImporter:
-       raise ImportError(fullname)
- 
-     filepath = self._fullname_to_filepath(fullname)
--    return imp.load_source(fullname, filepath)
-+    return load_source(fullname, filepath)
- 
- class BinaryProtoGenerator:
- 
-diff -up chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py.me chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py
---- chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py.me	2023-07-22 15:17:19.114258801 +0200
-+++ chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py	2023-07-22 15:17:43.368200491 +0200
-@@ -32,7 +32,7 @@ def FilterLine(filename, line, output):
-     return
- 
-   if line.startswith("goog.provide"):
--    match = re.match("goog.provide\('([^']+)'\);", line)
-+    match = re.match(r"goog.provide\('([^']+)'\);", line)
-     if not match:
-       print("Invalid goog.provide line in %s:\n%s" % (filename, line))
-       sys.exit(1)
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py.me	2023-07-22 15:12:41.850895179 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py	2023-07-22 15:12:55.844871207 +0200
-@@ -18,7 +18,7 @@ class HTMLGenerationController(object):
- 
-   def GetHTMLForInlineStylesheet(self, contents):
-     if self.current_module is None:
--      if re.search('url\(.+\)', contents):
-+      if re.search(r'url\(.+\)', contents):
-         raise Exception(
-             'Default HTMLGenerationController cannot handle inline style urls')
-       return contents
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py.me	2023-07-22 15:14:06.923717910 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py	2023-07-22 15:18:03.704150614 +0200
-@@ -4,4 +4,4 @@
- 
- 
- def EscapeJSIfNeeded(js):
--  return js.replace('</script>', '<\/script>')
-+  return js.replace(r'</script>', r'<\/script>')
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py.me	2023-07-22 15:14:30.105662532 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py	2023-07-22 15:14:57.977595950 +0200
-@@ -293,6 +293,6 @@ class HTMLModuleParser():
-       html = ''
-     else:
-       if html.find('< /script>') != -1:
--        raise Exception('Escape script tags with <\/script>')
-+        raise Exception(r'Escape script tags with <\/script>')
- 
-     return HTMLModuleParserResults(html)
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py.me	2023-07-22 15:13:12.316842990 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py	2023-07-22 15:13:49.684759091 +0200
-@@ -60,7 +60,7 @@ class ParsedStyleSheet(object):
-       return 'url(data:image/%s;base64,%s)' % (ext[1:], data.decode('utf-8'))
- 
-     # I'm assuming we only have url()'s associated with images
--    return re.sub('url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-+    return re.sub(r'url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-                   InlineUrl, self.contents)
- 
-   def AppendDirectlyDependentFilenamesTo(self, dependent_filenames):
-@@ -72,7 +72,7 @@ class ParsedStyleSheet(object):
-       raise Exception('@imports are not supported')
- 
-     matches = re.findall(
--        'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-+        r'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-         self.contents)
- 
-     def resolve_url(url):
-diff -up chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py.me chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py
---- chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py.me	2023-07-22 15:11:56.826972306 +0200
-+++ chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py	2023-07-22 15:12:37.550902545 +0200
-@@ -119,8 +119,8 @@ class _PreprocessingLoader(jinja2.BaseLo
-             source = self.preprocess(f.read())
-         return source, path, lambda: mtime == os.path.getmtime(path)
- 
--    blockstart = re.compile('{%-?\s*(if|elif|else|for|block|macro)[^}]*%}')
--    blockend = re.compile('{%-?\s*(end(if|for|block|macro)|elif|else)[^}]*%}')
-+    blockstart = re.compile(r'{%-?\s*(if|elif|else|for|block|macro)[^}]*%}')
-+    blockend = re.compile(r'{%-?\s*(end(if|for|block|macro)|elif|else)[^}]*%}')
- 
-     def preprocess(self, source):
-         lines = source.split('\n')
diff --git a/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch b/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
deleted file mode 100644
index 3b79f512487ae..0000000000000
--- a/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-diff -up chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc
---- chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:37.000000000 +0200
-+++ chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc	2023-06-17 16:53:20.216628557 +0200
-@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui
- void CdmPromiseAdapter::Clear(ClearReason reason) {
-   // Reject all outstanding promises.
-   DCHECK(thread_checker_.CalledOnValidThread());
--  for (auto& [promise_id, promise] : promises_) {
-+  for (auto& [p_i, p_e] : promises_) {
-+    auto& promise_id = p_i;
-+    auto& promise = p_e;
-     TRACE_EVENT_NESTABLE_ASYNC_END1(
-         "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id),
-         "status", "cleared");
-diff -up chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
---- chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:41.000000000 +0200
-+++ chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc	2023-06-17 18:47:06.001403966 +0200
-@@ -655,8 +658,10 @@ NGGridSizingTree NGGridLayoutAlgorithm::
-   NGGridSizingTree sizing_tree;
- 
-   if (const auto* layout_subtree = ConstraintSpace().GridLayoutSubtree()) {
--    auto& [grid_items, layout_data, subtree_size] =
--        sizing_tree.CreateSizingData();
-+    auto& [g_i, l_d, s_s] = sizing_tree.CreateSizingData();
-+    auto& grid_items = g_i;
-+    auto& layout_data = l_d;
-+    auto& subtree_size = s_s;
- 
-     const auto& node = Node();
-     grid_items =
-@@ -1798,8 +1803,10 @@ void NGGridLayoutAlgorithm::CompleteTrac
-     bool* opt_needs_additional_pass) const {
-   DCHECK(sizing_subtree);
- 
--  auto& [grid_items, layout_data, subtree_size] =
--      sizing_subtree.SubtreeRootData();
-+  auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData();
-+  auto& grid_items = g_i;
-+  auto& layout_data = l_d;
-+  auto& subtree_size = s_s;
- 
-   const bool is_for_columns = track_direction == kForColumns;
-   const bool has_non_definite_track =
-@@ -1924,8 +1931,10 @@ template <typename CallbackFunc>
- void NGGridLayoutAlgorithm::ForEachSubgrid(
-     const NGGridSizingSubtree& sizing_subtree,
-     const CallbackFunc& callback_func) const {
--  auto& [grid_items, layout_data, subtree_size] =
--      sizing_subtree.SubtreeRootData();
-+  auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData();
-+  auto& grid_items = g_i;
-+  auto& layout_data = l_d;
-+  auto& subtree_size = s_s;
- 
-   // If we know this subtree doesn't have nested subgrids we can exit early
-   // instead of iterating over every grid item looking for them.
-diff -up chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc
---- chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me	2023-06-19 08:04:02.287072722 +0200
-+++ chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc	2023-06-19 08:18:24.576814950 +0200
-@@ -1393,7 +1393,8 @@ void ServiceWorkerContextWrapper::MaybeP
-     return;
-   }
- 
--  auto [document_url, key, callback] = std::move(*request);
-+  auto [d_u, key, callback] = std::move(*request);
-+  auto document_url = d_u;
- 
-   DCHECK(document_url.is_valid());
-   TRACE_EVENT1("ServiceWorker",
-diff -up chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.me chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
---- chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.me	2023-09-15 13:03:00.787257048 +0200
-+++ chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc	2023-09-15 13:15:05.502706522 +0200
-@@ -3437,7 +3437,10 @@ void NGGridLayoutAlgorithm::PlaceGridIte
-   DCHECK(out_row_break_between);
- 
-   const auto& container_space = ConstraintSpace();
--  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
-+  const auto& [g_i, l_d, t_s] = sizing_tree.TreeRootData();
-+  const auto& grid_items = g_i;
-+  const auto& layout_data = l_d;
-+  const auto& tree_size = t_s;
- 
-   const auto* cached_layout_subtree = container_space.GridLayoutSubtree();
-   const auto container_writing_direction =
-@@ -3601,7 +3604,10 @@ void NGGridLayoutAlgorithm::PlaceGridIte
- 
-   // TODO(ikilpatrick): Update |SetHasSeenAllChildren| and early exit if true.
-   const auto& constraint_space = ConstraintSpace();
--  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
-+  const auto& [g_i, l_d, t_s] = sizing_tree.TreeRootData();
-+  const auto& grid_items = g_i;
-+  const auto& layout_data = l_d;
-+  const auto& tree_size =t_s;
- 
-   const auto* cached_layout_subtree = constraint_space.GridLayoutSubtree();
-   const auto container_writing_direction =
diff --git a/srcpkgs/chromium/patches/chromium-119-constexpr.patch b/srcpkgs/chromium/patches/chromium-119-constexpr.patch
deleted file mode 100644
index b195ff408ba81..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-constexpr.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h.me chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h
---- chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h.me	2023-10-31 21:05:05.548565241 +0100
-+++ chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h	2023-10-31 21:20:53.945532094 +0100
-@@ -93,7 +93,7 @@ class MiracleParameter {
- template <>
- class MiracleParameter<std::string> : public MiracleParameterBase<std::string> {
-  public:
--  constexpr MiracleParameter(const base::Feature* feature,
-+  MiracleParameter(const base::Feature* feature,
-                              const char* param_name,
-                              std::string default_value)
-       : MiracleParameterBase(feature, param_name, std::move(default_value)) {}
diff --git a/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch b/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
deleted file mode 100644
index 88d675e8047f0..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
+++ /dev/null
@@ -1,195 +0,0 @@
-commit 87fca7f1759e800bd72b5ab6511eea17d6400a76
-Author: Pilar Molina Lopez <pmolinalopez@chromium.org>
-Date:   Tue Oct 24 19:57:55 2023 +0000
-
-    video: hide UseChromeOSDirectVideoDecoder flag on VA-API devices
-    
-    We are seeing crashes causes by this CHECK statement:
-    https://source.chromium.org/chromium/chromium/src/+/main:content/public/browser/gpu_utils.cc;l=151;drc=0e777ba9b6c34611705d5b145c92bcd09539011c
-    It's triggered when the user manually disables the UseChromeOSDirectVideoDecoder
-    flag on VA-API devices (Intel and AMD). This flag is supported only on
-    non-Intel and non-AMD devices. This CL adds this information to the flag
-    description and hides the flag in case VA-API is used.
-    
-    Bug: 1469285
-    Test: manual test on volteer
-    Change-Id: I153b9ccb3815498c91ce5eee966834060749e247
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4960919
-    Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
-    Reviewed-by: Andres Calderon Jaramillo <andrescj@chromium.org>
-    Reviewed-by: Avi Drissman <avi@chromium.org>
-    Commit-Queue: Pilar Molina Lopez <pmolinalopez@chromium.org>
-    Cr-Commit-Position: refs/heads/main@{#1214411}
-
-diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
-index ee9fb206cde36..0fe18013ab044 100644
---- a/chrome/browser/DEPS
-+++ b/chrome/browser/DEPS
-@@ -418,6 +418,7 @@ include_rules = [
-   "+media/base",  # For media switches
-   "+media/capabilities", # For InMemoryVideoDecodeStatsDB
-   "+media/cdm",
-+  "+media/gpu/buildflags.h",
-   "+media/remoting/device_capability_checker.h",
-   "+media/capture",
-   "+media/midi",  # For midi switches
-diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
-index 84709afaa34d0..777bebeb33d9e 100644
---- a/chrome/browser/about_flags.cc
-+++ b/chrome/browser/about_flags.cc
-@@ -7578,11 +7578,13 @@ const FeatureEntry kFeatureEntries[] = {
- #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
- 
- #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-+#if !BUILDFLAG(USE_VAAPI)
-     {"chromeos-direct-video-decoder",
-      flag_descriptions::kChromeOSDirectVideoDecoderName,
-      flag_descriptions::kChromeOSDirectVideoDecoderDescription,
-      kOsCrOS | kOsLacros,
-      FEATURE_VALUE_TYPE(media::kUseChromeOSDirectVideoDecoder)},
-+#endif  // !BUILDFLAG(USE_VAAPI)
- 
-     {"enable-vbr-encode-acceleration",
-      flag_descriptions::kChromeOSHWVBREncodingName,
-diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
-index 318a8be9ab1a6..d2497d0c403f3 100644
---- a/chrome/browser/flag_descriptions.cc
-+++ b/chrome/browser/flag_descriptions.cc
-@@ -7,6 +7,7 @@
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "components/supervised_user/core/common/buildflags.h"
-+#include "media/gpu/buildflags.h"
- #include "pdf/buildflags.h"
- 
- // Keep in identical order as the header file, see the comment at the top
-@@ -7338,6 +7339,7 @@ const char kQuickOfficeForceFileDownloadDescription[] =
- #endif  // BUILDFLAG(IS_CHROMEOS)
- 
- #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-+#if !BUILDFLAG(USE_VAAPI)
- const char kChromeOSDirectVideoDecoderName[] = "ChromeOS Direct Video Decoder";
- const char kChromeOSDirectVideoDecoderDescription[] =
-     "Enables the hardware-accelerated ChromeOS direct media::VideoDecoder "
-@@ -7345,7 +7347,8 @@ const char kChromeOSDirectVideoDecoderDescription[] =
-     "--platform-disallows-chromeos-direct-video-decoder command line switch "
-     "which is added for platforms where said direct VideoDecoder does not work "
-     "or is not well tested (see the disable_cros_video_decoder USE flag in "
--    "ChromeOS)";
-+    "ChromeOS). This flag is supported only on non-Intel and non-AMD devices.";
-+#endif  // !BUILDFLAG(USE_VAAPI)
- const char kChromeOSHWVBREncodingName[] =
-     "ChromeOS Hardware Variable Bitrate Encoding";
- const char kChromeOSHWVBREncodingDescription[] =
-diff --git a/content/public/browser/gpu_utils.cc b/content/public/browser/gpu_utils.cc
-index dceeca9659a85..3d091359777cc 100644
---- a/content/public/browser/gpu_utils.cc
-+++ b/content/public/browser/gpu_utils.cc
-@@ -133,20 +133,26 @@ const gpu::GpuPreferences GetGpuPreferencesFromCommandLine() {
- #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-   // The direct VideoDecoder is disallowed on some particular SoC/platforms.
-   const bool should_use_direct_video_decoder =
-+#if BUILDFLAG(USE_VAAPI)
-+      true;
-+#else
-       !command_line->HasSwitch(
-           switches::kPlatformDisallowsChromeOSDirectVideoDecoder) &&
-       base::FeatureList::IsEnabled(media::kUseChromeOSDirectVideoDecoder);
-+#endif  // BUILDFLAG(USE_VAAPI)
-+
-+  gpu_preferences.enable_chromeos_direct_video_decoder =
-+#if BUILDFLAG(USE_VAAPI)
-+      should_use_direct_video_decoder;
-+#else
-+      // For testing purposes, the following flag allows using the "other" video
-+      // decoder implementation.
-+      base::FeatureList::IsEnabled(
-+          media::kUseAlternateVideoDecoderImplementation)
-+          ? !should_use_direct_video_decoder
-+          : should_use_direct_video_decoder;
-+#endif  // BUILDFLAG(USE_VAAPI)
- 
--  // For testing purposes, the following flag allows using the "other" video
--  // decoder implementation.
--  if (base::FeatureList::IsEnabled(
--          media::kUseAlternateVideoDecoderImplementation)) {
--    gpu_preferences.enable_chromeos_direct_video_decoder =
--        !should_use_direct_video_decoder;
--  } else {
--    gpu_preferences.enable_chromeos_direct_video_decoder =
--        should_use_direct_video_decoder;
--  }
- #if BUILDFLAG(USE_VAAPI)
-   CHECK(gpu_preferences.enable_chromeos_direct_video_decoder);
- #endif  // BUILDFLAG(USE_VAAPI)
-diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
-index 1af4de46e2a02..3086b1bec2134 100644
---- a/media/base/media_switches.cc
-+++ b/media/base/media_switches.cc
-@@ -1192,6 +1192,7 @@ BASE_FEATURE(kChromeOSHWVBREncoding,
-              "ChromeOSHWVBREncoding",
-              base::FEATURE_DISABLED_BY_DEFAULT);
- 
-+#if !BUILDFLAG(USE_VAAPI)
- // Enable the hardware-accelerated direct video decoder instead of the one
- // needing the VdaVideoDecoder adapter. This flag is used mainly as a
- // chrome:flag for developers debugging issues as well as to be able to
-@@ -1200,6 +1201,7 @@ BASE_FEATURE(kChromeOSHWVBREncoding,
- BASE_FEATURE(kUseChromeOSDirectVideoDecoder,
-              "UseChromeOSDirectVideoDecoder",
-              base::FEATURE_ENABLED_BY_DEFAULT);
-+#endif  // !BUILDFLAG(USE_VAAPI)
- 
- // Limit the number of concurrent hardware decoder instances on ChromeOS.
- BASE_FEATURE(kLimitConcurrentDecoderInstances,
-@@ -1228,7 +1230,7 @@ BASE_FEATURE(kPreferSoftwareMT21,
-              "PreferSoftwareMT21",
-              base::FEATURE_DISABLED_BY_DEFAULT);
- #endif  // defined(ARCH_CPU_ARM_FAMILY)
--#if BUILDFLAG(IS_CHROMEOS)
-+#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- // ChromeOS has one of two VideoDecoder implementations active based on
- // SoC/board specific configurations that are sent via command line flags. This
- // switch allows using the non default implementation for testing.
-@@ -1236,7 +1238,7 @@ BASE_FEATURE(kPreferSoftwareMT21,
- BASE_FEATURE(kUseAlternateVideoDecoderImplementation,
-              "UseAlternateVideoDecoderImplementation",
-              base::FEATURE_DISABLED_BY_DEFAULT);
--#endif  // BUILDFLAG(IS_CHROMEOS)
-+#endif  // BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- 
- #if BUILDFLAG(IS_WIN)
-diff --git a/media/base/media_switches.h b/media/base/media_switches.h
-index 1d9c2c2d9df73..96d9595be110e 100644
---- a/media/base/media_switches.h
-+++ b/media/base/media_switches.h
-@@ -14,6 +14,7 @@
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "media/base/media_export.h"
-+#include "media/gpu/buildflags.h"
- #include "media/media_buildflags.h"
- 
- namespace base {
-@@ -381,16 +382,18 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kBuiltInHlsPlayer);
- #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kChromeOSHWAV1Decoder);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kChromeOSHWVBREncoding);
-+#if !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseChromeOSDirectVideoDecoder);
-+#endif  // !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kLimitConcurrentDecoderInstances);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUSeSequencedTaskRunnerForVEA);
- #if defined(ARCH_CPU_ARM_FAMILY)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kPreferGLImageProcessor);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kPreferSoftwareMT21);
- #endif  // defined(ARCH_CPU_ARM_FAMILY)
--#if BUILDFLAG(IS_CHROMEOS)
-+#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseAlternateVideoDecoderImplementation);
--#endif  // BUILDFLAG(IS_CHROMEOS)
-+#endif  // BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- 
- #if BUILDFLAG(IS_WIN)
diff --git a/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch b/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
deleted file mode 100644
index 5cb969f4f40cf..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h.me chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h
---- chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h.me	2023-10-27 20:07:16.421230815 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h	2023-10-27 20:07:36.883600085 +0200
-@@ -52,7 +52,7 @@ class FragmentDataIterator
-  public:
-   explicit FragmentDataIterator(const LayoutObject& object)
-       : FragmentDataIteratorBase(&object.FirstFragment()) {}
--  explicit FragmentDataIterator(nullptr_t)
-+  explicit FragmentDataIterator(std::nullptr_t)
-       : FragmentDataIteratorBase(nullptr) {}
- };
- 
-@@ -63,7 +63,7 @@ class MutableFragmentDataIterator
-   explicit MutableFragmentDataIterator(const LayoutObject& object)
-       : FragmentDataIteratorBase(
-             &object.GetMutableForPainting().FirstFragment()) {}
--  explicit MutableFragmentDataIterator(nullptr_t)
-+  explicit MutableFragmentDataIterator(std::nullptr_t)
-       : FragmentDataIteratorBase(nullptr) {}
- };
- 
diff --git a/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch b/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
deleted file mode 100644
index 717d897446c7c..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-commit bdcc23e0a5e7e220660d3f54c97262f9a4c31606
-Author: Nick Diego Yamane <nickdiego@igalia.com>
-Date:   Thu Nov 2 17:26:25 2023 +0000
-
-    gbm: nvidia: use separate bo to verify modifiers
-    
-    Buggy Nvidia drivers fail to return FDs for planes of a BO which had
-    already an imported BO destroyed before. This is a workaround for that
-    issue, which consists of creating/destroying a separate 1x1 BO for
-    validating the modifiers before actually creating the final requested
-    BO, which for now is limited to IS_LINUX builds.
-    
-    The Nvidia driver bug is being tracked under internal bug 4315529. There
-    seems to be other issues when running under Wayland with Nvidia, which
-    will be tracked and addressed in separate patches.
-    
-    R=dcastagna, msisov@igalia.com
-    
-      with ozone/wayland backend and verify GPU acceleration is not broken.
-    
-    Test: In a single Nvidia GPU setup, with proprietary driver, run Chrome
-    Bug: 1273758, 1478684, 1463851
-    Change-Id: I9f322bcf40b460bcd4ead02f05dd2e9a8d271cea
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4989782
-    Reviewed-by: Maksim Sisov <msisov@igalia.com>
-    Commit-Queue: Nick Yamane <nickdiego@igalia.com>
-    Cr-Commit-Position: refs/heads/main@{#1218924}
-
-diff --git a/ui/gfx/linux/gbm_wrapper.cc b/ui/gfx/linux/gbm_wrapper.cc
-index bf90b76605f68..14918c19c0ab0 100644
---- a/ui/gfx/linux/gbm_wrapper.cc
-+++ b/ui/gfx/linux/gbm_wrapper.cc
-@@ -11,6 +11,7 @@
- #include "base/logging.h"
- #include "base/memory/raw_ptr.h"
- #include "base/memory/raw_ptr_exclusion.h"
-+#include "base/numerics/safe_conversions.h"
- #include "base/posix/eintr_wrapper.h"
- #include "skia/ext/legacy_display_globals.h"
- #include "third_party/skia/include/core/SkSurface.h"
-@@ -71,6 +72,7 @@ base::ScopedFD GetPlaneFdForBo(gbm_bo* bo, size_t plane) {
-   int ret;
-   // Use DRM_RDWR to allow the fd to be mappable in another process.
-   ret = drmPrimeHandleToFD(dev_fd, plane_handle, DRM_CLOEXEC | DRM_RDWR, &fd);
-+  PLOG_IF(ERROR, ret != 0) << "Failed to get fd for plane.";
- 
-   // Older DRM implementations blocked DRM_RDWR, but gave a read/write mapping
-   // anyways
-@@ -301,58 +303,82 @@ class Device final : public ui::GbmDevice {
- 
-   std::unique_ptr<ui::GbmBuffer> CreateBufferWithModifiers(
-       uint32_t format,
--      const gfx::Size& size,
-+      const gfx::Size& requested_size,
-       uint32_t flags,
-       const std::vector<uint64_t>& modifiers) override {
--    if (modifiers.empty())
--      return CreateBuffer(format, size, flags);
--
--    std::vector<uint64_t> filtered_modifiers =
--        GetFilteredModifiers(format, flags, modifiers);
--    struct gbm_bo* bo = nullptr;
--    while (filtered_modifiers.size() > 0) {
--      bo = gbm_bo_create_with_modifiers(device_, size.width(), size.height(),
--                                        format, filtered_modifiers.data(),
--                                        filtered_modifiers.size());
--      if (!bo) {
-+    if (modifiers.empty()) {
-+      return CreateBuffer(format, requested_size, flags);
-+    }
-+
-+    // Buggy drivers prevent us from getting plane FDs from a BO which had its
-+    // previously imported BO destroyed. E.g: Nvidia. Thus, on Linux Desktop, we
-+    // do the create/import modifiers validation loop below using a separate set
-+    // of 1x1 BOs which are destroyed before creating the final BO creation used
-+    // to instantiate the returned GbmBuffer.
-+    gfx::Size size =
-+#if BUILDFLAG(IS_LINUX)
-+        gfx::Size(1, 1);
-+#else
-+        requested_size;
-+#endif
-+    auto filtered_modifiers = GetFilteredModifiers(format, flags, modifiers);
-+    struct gbm_bo* created_bo = nullptr;
-+    bool valid_modifiers = false;
-+
-+    while (!valid_modifiers && !filtered_modifiers.empty()) {
-+      created_bo = gbm_bo_create_with_modifiers(
-+          device_, size.width(), size.height(), format,
-+          filtered_modifiers.data(), filtered_modifiers.size());
-+      if (!created_bo) {
-         return nullptr;
-       }
- 
--      struct gbm_import_fd_modifier_data fd_data;
--      fd_data.width = size.width();
--      fd_data.height = size.height();
--      fd_data.format = format;
--      fd_data.num_fds = gbm_bo_get_plane_count(bo);
--      fd_data.modifier = gbm_bo_get_modifier(bo);
--
--      // Store fds in the vector of base::ScopedFDs. Will be released
--      // automatically.
-+      const int planes_count = gbm_bo_get_plane_count(created_bo);
-+      struct gbm_import_fd_modifier_data fd_data = {
-+          .width = base::checked_cast<uint32_t>(size.width()),
-+          .height = base::checked_cast<uint32_t>(size.height()),
-+          .format = format,
-+          .num_fds = base::checked_cast<uint32_t>(planes_count),
-+          .modifier = gbm_bo_get_modifier(created_bo)};
-+      // Store fds in a base::ScopedFDs vector. Will be released automatically.
-       std::vector<base::ScopedFD> fds;
-       for (size_t i = 0; i < static_cast<size_t>(fd_data.num_fds); ++i) {
--        fds.emplace_back(GetPlaneFdForBo(bo, i));
-+        fds.emplace_back(GetPlaneFdForBo(created_bo, i));
-         fd_data.fds[i] = fds.back().get();
--        fd_data.strides[i] = gbm_bo_get_stride_for_plane(bo, i);
--        fd_data.offsets[i] = gbm_bo_get_offset(bo, i);
-+        fd_data.strides[i] = gbm_bo_get_stride_for_plane(created_bo, i);
-+        fd_data.offsets[i] = gbm_bo_get_offset(created_bo, i);
-       }
- 
--      struct gbm_bo* bo_import =
-+      struct gbm_bo* imported_bo =
-           gbm_bo_import(device_, GBM_BO_IMPORT_FD_MODIFIER, &fd_data, flags);
--      if (bo_import) {
--        gbm_bo_destroy(bo_import);
--        break;
-+
-+      if (imported_bo) {
-+        valid_modifiers = true;
-+        gbm_bo_destroy(imported_bo);
-       } else {
--        gbm_bo_destroy(bo);
--        bo = nullptr;
-         AddModifierToBlocklist(format, flags, fd_data.modifier);
-         filtered_modifiers =
-             GetFilteredModifiers(format, flags, filtered_modifiers);
-       }
-+
-+      if (!valid_modifiers || size != requested_size) {
-+        gbm_bo_destroy(created_bo);
-+        created_bo = nullptr;
-+      }
-     }
--    if (!bo) {
--      return nullptr;
-+
-+    // If modifiers were successfully verified though `created_bo` is null here,
-+    // it it means that the buffer created for verification could not be reused,
-+    // ie: different size, so create it now with the `requested_size`.
-+    if (valid_modifiers && !created_bo) {
-+      created_bo = gbm_bo_create_with_modifiers(
-+          device_, requested_size.width(), requested_size.height(), format,
-+          filtered_modifiers.data(), filtered_modifiers.size());
-+      PLOG_IF(ERROR, !created_bo) << "Failed to create BO with modifiers.";
-     }
- 
--    return CreateBufferForBO(bo, format, size, flags);
-+    return created_bo ? CreateBufferForBO(created_bo, format, size, flags)
-+                      : nullptr;
-   }
- 
-   std::unique_ptr<ui::GbmBuffer> CreateBufferFromHandle(
diff --git a/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch b/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
new file mode 100644
index 0000000000000..bb461ef3664a2
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
@@ -0,0 +1,14 @@
+--- chromium-120.0.6099.35/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h.than	2023-11-26 13:50:07.005519877 +0100
++++ chromium-120.0.6099.35/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h	2023-11-26 13:50:49.727267240 +0100
+@@ -152,10 +152,7 @@
+   (!BUILDFLAG(PUT_REF_COUNT_IN_PREVIOUS_SLOT) && \
+    defined(ARCH_CPU_LITTLE_ENDIAN))
+ 
+-#define PA_CONFIG_HAS_MEMORY_TAGGING()              \
+-  (defined(ARCH_CPU_ARM64) && defined(__clang__) && \
+-   !defined(ADDRESS_SANITIZER) &&                   \
+-   (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
++#define PA_CONFIG_HAS_MEMORY_TAGGING() 0
+ 
+ #if PA_CONFIG(HAS_MEMORY_TAGGING)
+ static_assert(sizeof(void*) == 8);
diff --git a/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch b/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
new file mode 100644
index 0000000000000..98216ddb465ca
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
@@ -0,0 +1,12 @@
+diff -up chromium-120.0.6099.56/media/base/media_switches.cc.me chromium-120.0.6099.56/media/base/media_switches.cc
+--- chromium-120.0.6099.56/media/base/media_switches.cc.me	2023-12-02 11:43:21.990775897 +0100
++++ chromium-120.0.6099.56/media/base/media_switches.cc	2023-12-02 11:45:23.248006377 +0100
+@@ -1636,7 +1636,7 @@ BASE_FEATURE(kUseSharedImagesForPepperVi
+ // Enables FFmpeg allow lists for supported codecs / containers.
+ BASE_FEATURE(kFFmpegAllowLists,
+              "FFmpegAllowLists",
+-             base::FEATURE_ENABLED_BY_DEFAULT);
++             base::FEATURE_DISABLED_BY_DEFAULT);
+ 
+ #if BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS)
+ // Allows decoding of theora / vp3 content.
diff --git a/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch b/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
new file mode 100644
index 0000000000000..6a2585b953c3b
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
@@ -0,0 +1,14 @@
+--- chromium-120.0.6099.35/chrome/browser/media/router/media_router_feature.cc.orig	2023-11-26 13:25:34.724228755 +0100
++++ chromium-120.0.6099.35/chrome/browser/media/router/media_router_feature.cc	2023-11-26 13:28:26.452359146 +0100
+@@ -71,11 +71,7 @@
+ // TODO(b/202294946): Remove when enabled by default on ChromeOS.
+ BASE_FEATURE(kGlobalMediaControlsCastStartStop,
+              "GlobalMediaControlsCastStartStop",
+-#if BUILDFLAG(IS_CHROMEOS)
+              base::FEATURE_DISABLED_BY_DEFAULT);
+-#else
+-             base::FEATURE_ENABLED_BY_DEFAULT);
+-#endif  // BUILDFLAG(IS_CHROMEOS)
+ #endif  // !BUILDFLAG(IS_ANDROID)
+ 
+ namespace {
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
new file mode 100644
index 0000000000000..96258e67aaebb
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
@@ -0,0 +1,230 @@
+commit 57526b8dc45b2e6c67bba7306f1dde73b1f2910c
+Author: sisidovski <sisidovski@chromium.org>
+Date:   Tue Oct 24 09:32:49 2023 +0000
+
+    Remove unused items from the RaceNetworkRequest hashmap
+    
+    When the AutoPreload or the race-network-and-fetch-handler option in the
+    static routing API is enabled, network requests are dispatched and
+    URLLoaderFactories are held in a hashmap in ServiceWorkerGlobalScope.
+    Those are consumed inside the fetch handler when fetch(e.request) is
+    called. But if the fetch handler doesn't call fetch() e.g. fallback,
+    those hashmap items does not have a chance to be removed.
+    
+    This CL changes the hashmap items to be removed when the fetch event
+    finishes, and the URLLoaderFactory is still not consumed at that time.
+    This may loose the dedupe capability if fetch() is called later e.g.
+    setTimeout(() => fetch()), but it makes sense to prioritize keeping the
+    hashmap small.
+    
+    Change-Id: I51bdc9d5eb5185f2b5b4df6ee785715b1180c848
+    Bug: 1492640
+    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4964840
+    Reviewed-by: Minoru Chikamune <chikamune@chromium.org>
+    Commit-Queue: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+    Reviewed-by: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+    Cr-Commit-Position: refs/heads/main@{#1214064}
+
+diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+index 02887edc10883..b3624fc0162df 100644
+--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
++++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+@@ -46,6 +46,7 @@
+ #include "services/network/public/cpp/cross_origin_embedder_policy.h"
+ #include "services/network/public/mojom/cookie_manager.mojom-blink.h"
+ #include "services/network/public/mojom/cross_origin_embedder_policy.mojom.h"
++#include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
+ #include "third_party/blink/public/common/features.h"
+ #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
+ #include "third_party/blink/public/mojom/notifications/notification.mojom-blink.h"
+@@ -1096,6 +1097,10 @@ void ServiceWorkerGlobalScope::DidHandleFetchEvent(
+       TRACE_ID_WITH_SCOPE(kServiceWorkerGlobalScopeTraceScope,
+                           TRACE_ID_LOCAL(event_id)),
+       TRACE_EVENT_FLAG_FLOW_IN, "status", MojoEnumToString(status));
++
++  // Delete the URLLoaderFactory for the RaceNetworkRequest if it's not used.
++  RemoveItemFromRaceNetworkRequests(event_id);
++
+   if (!RunEventCallback(&fetch_event_callbacks_, event_queue_.get(), event_id,
+                         status)) {
+     // The event may have been aborted. Its response callback also needs to be
+@@ -1495,6 +1500,7 @@ void ServiceWorkerGlobalScope::AbortCallbackForFetchEvent(
+     response_callback_iter->value->TakeValue().reset();
+     fetch_response_callbacks_.erase(response_callback_iter);
+   }
++  RemoveItemFromRaceNetworkRequests(event_id);
+ 
+   // Run the event callback with the error code.
+   auto event_callback_iter = fetch_event_callbacks_.find(event_id);
+@@ -1551,52 +1557,11 @@ void ServiceWorkerGlobalScope::StartFetchEvent(
+ 
+   if (params->race_network_request_loader_factory &&
+       params->request->service_worker_race_network_request_token) {
+-    auto insert_result = race_network_request_loader_factories_.insert(
+-        String(params->request->service_worker_race_network_request_token
+-                   ->ToString()),
+-        std::move(params->race_network_request_loader_factory));
+-
+-    // DumpWithoutCrashing if the token is empty, or not inserted as a new entry
+-    // to |race_network_request_loader_factories_|.
+-    // TODO(crbug.com/1492640) Remove DumpWithoutCrashing once we collect data
+-    // and identify the cause.
+-    static bool has_dumped_without_crashing_for_empty_token = false;
+-    static bool has_dumped_without_crashing_for_not_new_entry = false;
+-    if (!has_dumped_without_crashing_for_empty_token &&
+-        params->request->service_worker_race_network_request_token
+-            ->is_empty()) {
+-      has_dumped_without_crashing_for_empty_token = true;
+-      SCOPED_CRASH_KEY_BOOL(
+-          "SWGlobalScope", "empty_race_token",
+-          params->request->service_worker_race_network_request_token
+-              ->is_empty());
+-      SCOPED_CRASH_KEY_STRING64(
+-          "SWGlobalScope", "race_token_string",
+-          params->request->service_worker_race_network_request_token
+-              ->ToString());
+-      SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
+-                            insert_result.is_new_entry);
+-      SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
+-                                 params->request->url.GetString().Utf8());
+-      base::debug::DumpWithoutCrashing();
+-    }
+-    if (!has_dumped_without_crashing_for_not_new_entry &&
+-        !insert_result.is_new_entry) {
+-      has_dumped_without_crashing_for_not_new_entry = true;
+-      SCOPED_CRASH_KEY_BOOL(
+-          "SWGlobalScope", "empty_race_token",
+-          params->request->service_worker_race_network_request_token
+-              ->is_empty());
+-      SCOPED_CRASH_KEY_STRING64(
+-          "SWGlobalScope", "race_token_string",
+-          params->request->service_worker_race_network_request_token
+-              ->ToString());
+-      SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
+-                            insert_result.is_new_entry);
+-      SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
+-                                 params->request->url.GetString().Utf8());
+-      base::debug::DumpWithoutCrashing();
+-    }
++    InsertNewItemToRaceNetworkRequests(
++        event_id,
++        params->request->service_worker_race_network_request_token.value(),
++        std::move(params->race_network_request_loader_factory),
++        params->request->url);
+   }
+ 
+   Request* request = Request::Create(
+@@ -2808,12 +2773,71 @@ bool ServiceWorkerGlobalScope::SetAttributeEventListener(
+ absl::optional<mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>
+ ServiceWorkerGlobalScope::FindRaceNetworkRequestURLLoaderFactory(
+     const base::UnguessableToken& token) {
+-  mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> result =
+-      race_network_request_loader_factories_.Take(String(token.ToString()));
++  std::unique_ptr<RaceNetworkRequestInfo> result =
++      race_network_requests_.Take(String(token.ToString()));
+   if (result) {
+-    return result;
++    race_network_request_fetch_event_ids_.erase(result->fetch_event_id);
++    return absl::optional<
++        mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>(
++        std::move(result->url_loader_factory));
+   }
+   return absl::nullopt;
+ }
+ 
++void ServiceWorkerGlobalScope::InsertNewItemToRaceNetworkRequests(
++    int fetch_event_id,
++    const base::UnguessableToken& token,
++    mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++        url_loader_factory,
++    const KURL& request_url) {
++  auto race_network_request_token = String(token.ToString());
++  auto info = std::make_unique<RaceNetworkRequestInfo>(
++      fetch_event_id, race_network_request_token,
++      std::move(url_loader_factory));
++  race_network_request_fetch_event_ids_.insert(fetch_event_id, info.get());
++  auto insert_result = race_network_requests_.insert(race_network_request_token,
++                                                     std::move(info));
++
++  // DumpWithoutCrashing if the token is empty, or not inserted as a new entry
++  // to |race_network_request_loader_factories_|.
++  // TODO(crbug.com/1492640) Remove DumpWithoutCrashing once we collect data
++  // and identify the cause.
++  static bool has_dumped_without_crashing_for_empty_token = false;
++  static bool has_dumped_without_crashing_for_not_new_entry = false;
++  if (!has_dumped_without_crashing_for_empty_token && token.is_empty()) {
++    has_dumped_without_crashing_for_empty_token = true;
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "empty_race_token",
++                          token.is_empty());
++    SCOPED_CRASH_KEY_STRING64("SWGlobalScope", "race_token_string",
++                              token.ToString());
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
++                          insert_result.is_new_entry);
++    SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
++                               request_url.GetString().Utf8());
++    base::debug::DumpWithoutCrashing();
++  }
++  if (!has_dumped_without_crashing_for_not_new_entry &&
++      !insert_result.is_new_entry) {
++    has_dumped_without_crashing_for_not_new_entry = true;
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "empty_race_token",
++                          token.is_empty());
++    SCOPED_CRASH_KEY_STRING64("SWGlobalScope", "race_token_string",
++                              token.ToString());
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
++                          insert_result.is_new_entry);
++    SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
++                               request_url.GetString().Utf8());
++    base::debug::DumpWithoutCrashing();
++  }
++}
++
++void ServiceWorkerGlobalScope::RemoveItemFromRaceNetworkRequests(
++    int fetch_event_id) {
++  RaceNetworkRequestInfo* info =
++      race_network_request_fetch_event_ids_.Take(fetch_event_id);
++  if (info) {
++    race_network_requests_.erase(info->token);
++  }
++}
++
+ }  // namespace blink
+diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+index 46c431b395825..ac4cac0b1d8fb 100644
+--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
++++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+@@ -623,6 +623,14 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final
+   // ServiceWorker.FetchEvent.QueuingTime histogram.
+   void RecordQueuingTime(base::TimeTicks created_time);
+ 
++  void InsertNewItemToRaceNetworkRequests(
++      int fetch_event_id,
++      const base::UnguessableToken& token,
++      mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++          url_loader_factory,
++      const KURL& request_url);
++  void RemoveItemFromRaceNetworkRequests(int fetch_event_id);
++
+   Member<ServiceWorkerClients> clients_;
+   Member<ServiceWorkerRegistration> registration_;
+   Member<::blink::ServiceWorker> service_worker_;
+@@ -768,10 +776,17 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final
+ 
+   blink::BlinkStorageKey storage_key_;
+ 
++  struct RaceNetworkRequestInfo {
++    int fetch_event_id;
++    String token;
++    mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++        url_loader_factory;
++  };
+   // TODO(crbug.com/918702) WTF::HashMap cannot use base::UnguessableToken as a
+   // key. As a workaround uses WTF::String as a key instead.
+-  HashMap<String, mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>
+-      race_network_request_loader_factories_;
++  HashMap<String, std::unique_ptr<RaceNetworkRequestInfo>>
++      race_network_requests_;
++  HashMap<int, RaceNetworkRequestInfo*> race_network_request_fetch_event_ids_;
+ 
+   HeapMojoAssociatedRemote<mojom::blink::AssociatedInterfaceProvider>
+       remote_associated_interfaces_{this};
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
new file mode 100644
index 0000000000000..8bbbbe9483632
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
@@ -0,0 +1 @@
+-RNp1
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch b/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
new file mode 100644
index 0000000000000..112da65b4d9b6
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
@@ -0,0 +1,16 @@
+diff -up chromium-120.0.6099.56/third_party/libc++/src/include/__config.me chromium-120.0.6099.56/third_party/libc++/src/include/__config
+--- chromium-120.0.6099.56/third_party/libc++/src/include/__config.me	2023-12-03 00:05:51.254483474 +0100
++++ chromium-120.0.6099.56/third_party/libc++/src/include/__config	2023-12-03 00:06:05.872863168 +0100
+@@ -32,11 +32,7 @@
+ 
+ // Warn if a compiler version is used that is not supported anymore
+ // LLVM RELEASE Update the minimum compiler versions
+-#  if defined(_LIBCPP_CLANG_VER)
+-#    if _LIBCPP_CLANG_VER < 1500
+-#      warning "Libc++ only supports Clang 15 and later"
+-#    endif
+-#  elif defined(_LIBCPP_APPLE_CLANG_VER)
++#  if defined(_LIBCPP_APPLE_CLANG_VER)
+ #    if _LIBCPP_APPLE_CLANG_VER < 1500
+ #      warning "Libc++ only supports AppleClang 15 and later"
+ #    endif
diff --git a/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch b/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
new file mode 100644
index 0000000000000..72c7b7ec41c28
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
@@ -0,0 +1,13 @@
+diff -up chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn.me chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn
+--- chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn.me	2023-11-26 16:14:15.364064126 +0100
++++ chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn	2023-11-26 16:41:16.877321990 +0100
+@@ -21,6 +21,9 @@ if (use_atk) {
+     minor = atspi_version[1]
+     micro = atspi_version[2]
+ 
++    # gn workaround for the error: Assignment had no effect
++    print("ATSPI Version: $major.$minor.$micro")
++
+     # ATSPI 2.49.90 now defines these for us and it's an error for us to
+     # redefine them on the compiler command line.
+     # See ATSPI 927344a34cd5bf81fc64da4968241735ecb4f03b
diff --git a/srcpkgs/chromium/patches/chromium-119-missing-header-files.patch b/srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
similarity index 97%
rename from srcpkgs/chromium/patches/chromium-119-missing-header-files.patch
rename to srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
index a2542ef420eaf..44f867475b218 100644
--- a/srcpkgs/chromium/patches/chromium-119-missing-header-files.patch
+++ b/srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
@@ -131,17 +131,6 @@ diff -up chromium-109.0.5414.74/third_party/swiftshader/src/System/LRUCache.hpp.
  #include <cstddef>
  #include <functional>
  #include <unordered_set>
-diff -up chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
---- chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me	2023-01-17 15:40:23.854386206 +0100
-+++ chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h	2023-01-17 16:58:19.397862885 +0100
-@@ -2388,6 +2388,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeV
- #ifdef VMA_IMPLEMENTATION
- #undef VMA_IMPLEMENTATION
- 
-+#include <cstdio>
- #include <cstdint>
- #include <cstdlib>
- #include <cstring>
 diff -up chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h
 --- chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me	2023-01-17 18:08:25.745491353 +0100
 +++ chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h	2023-01-17 18:08:35.777667632 +0100
diff --git a/srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch b/srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
similarity index 67%
rename from srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch
rename to srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
index a16c979c37f1c..b1d987adeff8d 100644
--- a/srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch
+++ b/srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
@@ -1,6 +1,25 @@
-diff -up chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constructor chromium-119.0.6045.59/base/trace_event/trace_log.cc
---- chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constructor	2023-10-26 18:16:51.000000000 +0200
-+++ chromium-119.0.6045.59/base/trace_event/trace_log.cc	2023-10-30 16:51:02.270151487 +0100
+diff -up chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc.no_matching_constructor chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc
+--- chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc.no_matching_constructor	2023-11-29 22:39:40.000000000 +0100
++++ chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc	2023-12-03 17:31:25.748420189 +0100
+@@ -218,13 +218,13 @@ PersistentSparseHistogramDataManager::Lo
+     // The sample-record could be for any sparse histogram. Add the reference
+     // to the appropriate collection for later use.
+     if (found_id == match_id) {
+-      found_records.emplace_back(ref, value);
++      found_records.emplace_back() = {ref, value};
+       found = true;
+     } else {
+       std::vector<ReferenceAndSample>* samples =
+           GetSampleMapRecordsWhileLocked(found_id);
+       CHECK(samples);
+-      samples->emplace_back(ref, value);
++      samples->emplace_back() = {ref, value};
+     }
+   }
+ 
+diff -up chromium-120.0.6099.56/base/trace_event/trace_log.cc.no_matching_constructor chromium-120.0.6099.56/base/trace_event/trace_log.cc
+--- chromium-120.0.6099.56/base/trace_event/trace_log.cc.no_matching_constructor	2023-11-29 22:39:40.000000000 +0100
++++ chromium-120.0.6099.56/base/trace_event/trace_log.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -2191,8 +2191,8 @@ void TraceLog::SetTraceBufferForTesting(
  #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
  void TraceLog::OnSetup(const perfetto::DataSourceBase::SetupArgs& args) {
@@ -12,9 +31,9 @@ diff -up chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constr
  }
  
  void TraceLog::OnStart(const perfetto::DataSourceBase::StartArgs&) {
-diff -up chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc
---- chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor	2023-10-26 18:16:57.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc	2023-10-30 16:51:02.269151462 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc
+--- chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor	2023-11-29 22:39:47.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -226,8 +226,8 @@ void OneTimePermissionProvider::OnSuspen
  
        while (rule_iterator && rule_iterator->HasNext()) {
@@ -37,9 +56,9 @@ diff -up chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permiss
        permissions::PermissionUmaUtil::RecordOneTimePermissionEvent(
            content_setting_type, trigger_event);
      }
-diff -up chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc
---- chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor	2023-10-26 18:16:57.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc	2023-10-30 16:51:02.267151412 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc
+--- chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor	2023-11-29 22:39:48.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -67,8 +67,8 @@ base::flat_map<std::string, SAMLProfileA
    // TODO(crbug.com/1445072): Add actual domains with attribute names.
    profile_attributes->insert(std::make_pair(
@@ -51,9 +70,9 @@ diff -up chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/pro
  
    // Extract domains and attributes from the command line switch.
    const base::CommandLine& command_line =
-diff -up chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
---- chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor	2023-10-26 18:17:00.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc	2023-10-30 16:51:02.262151288 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor	2023-11-29 22:39:52.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -474,10 +474,10 @@ void ChromeOmniboxClient::OnAutocomplete
                alternative_nav_match);
  
@@ -67,9 +86,117 @@ diff -up chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.
  
    if (browser_) {
      auto navigation = chrome::OpenCurrentURL(browser_);
-diff -up chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matching_constructor chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc
---- chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matching_constructor	2023-10-26 18:17:01.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc	2023-10-30 16:51:02.268151437 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc.no_matching_constructor	2023-11-29 22:39:52.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -148,8 +148,8 @@ SafetyHubMenuNotificationService::GetNot
+   // The information related to showing the notification needs to be persisted
+   // as well.
+   SaveNotificationsToPrefs();
+-  return MenuNotificationEntry(notification_to_show->GetNotificationCommandId(),
+-                               notification_to_show->GetNotificationString());
++  return MenuNotificationEntry{notification_to_show->GetNotificationCommandId(),
++                               notification_to_show->GetNotificationString()};
+ }
+ 
+ absl::optional<ResultMap>
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc	2023-12-03 17:31:25.749420208 +0100
+@@ -55,12 +55,12 @@ std::vector<EmbeddedPermissionPromptAskV
+ EmbeddedPermissionPromptAskView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
++        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+   }
+-  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
+-                       ButtonType::kAllow, ui::ButtonStyle::kTonal);
++  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
++                       ButtonType::kAllow, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h	2023-12-03 17:31:25.750420227 +0100
+@@ -86,6 +86,7 @@ class EmbeddedPermissionPromptBaseView :
+   struct RequestLineConfiguration {
+     const raw_ptr<const gfx::VectorIcon> icon;
+     std::u16string message;
++    RequestLineConfiguration(auto i, auto m) : icon(i), message(m) { }
+   };
+ 
+   struct ButtonConfiguration {
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -48,8 +48,8 @@ EmbeddedPermissionPromptPolicyView::GetR
+ std::vector<EmbeddedPermissionPromptPolicyView::ButtonConfiguration>
+ EmbeddedPermissionPromptPolicyView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
+-                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal);
++  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
++                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -63,18 +63,18 @@ EmbeddedPermissionPromptPreviouslyDenied
+ std::vector<EmbeddedPermissionPromptPreviouslyDeniedView::ButtonConfiguration>
+ EmbeddedPermissionPromptPreviouslyDeniedView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_NOT_ALLOWING),
+-      ButtonType::kContinueNotAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kContinueNotAllowing, ui::ButtonStyle::kTonal};
+ 
+   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
++        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+   } else {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllow, ui::ButtonStyle::kTonal);
++        ButtonType::kAllow, ui::ButtonStyle::kTonal};
+   }
+   return buttons;
+ }
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -57,13 +57,13 @@ EmbeddedPermissionPromptPreviouslyGrante
+ std::vector<EmbeddedPermissionPromptPreviouslyGrantedView::ButtonConfiguration>
+ EmbeddedPermissionPromptPreviouslyGrantedView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_ALLOWING),
+-      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal};
+ 
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_STOP_ALLOWING),
+-      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc.no_matching_constructor chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc
+--- chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc.no_matching_constructor	2023-11-29 22:39:54.000000000 +0100
++++ chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc	2023-12-03 17:31:25.750420227 +0100
 @@ -346,7 +346,7 @@ Status ParseMobileEmulation(const base::
                          "'version' field of type string");
          }
@@ -88,10 +215,10 @@ diff -up chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matc
        }
  
        client_hints.full_version_list = std::move(full_version_list);
-diff -up chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc
---- chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor	2023-10-30 16:51:02.273151562 +0100
-+++ chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc	2023-10-30 17:41:12.685887538 +0100
-@@ -195,9 +195,9 @@ class ContactInfoProfileSetter {
+diff -up chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc
+--- chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor	2023-11-29 22:39:57.000000000 +0100
++++ chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -197,9 +197,9 @@ class ContactInfoProfileSetter {
        CHECK(observations.empty());
        for (const sync_pb::ContactInfoSpecifics::Observation& proto_observation :
             metadata.observations()) {
@@ -103,10 +230,38 @@ diff -up chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sy
        }
      }
    }
-diff -up chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
---- chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc	2023-10-30 16:51:02.260151238 +0100
-@@ -1530,7 +1530,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOut
+diff -up chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc.no_matching_constructor chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc
+--- chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc.no_matching_constructor	2023-11-29 22:39:57.000000000 +0100
++++ chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -1763,10 +1763,10 @@ std::unique_ptr<AutofillProfile> Autofil
+     }
+ 
+     base::span<const uint8_t> observations_data = s.ColumnBlob(3);
+-    field_type_values.emplace_back(
++    field_type_values.emplace_back() = {
+         type, s.ColumnString16(1), s.ColumnInt(2),
+         std::vector<uint8_t>(observations_data.begin(),
+-                             observations_data.end()));
++                             observations_data.end())};
+ 
+     if (type == ADDRESS_HOME_COUNTRY) {
+       country_code = base::UTF16ToUTF8(s.ColumnString16(1));
+diff -up chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc.no_matching_constructor chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc
+--- chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc.no_matching_constructor	2023-11-29 22:39:58.000000000 +0100
++++ chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -630,7 +630,7 @@ void PasswordManager::OnUserModifiedNonP
+   // |driver| might be empty on iOS or in tests.
+   int driver_id = driver ? driver->GetId() : 0;
+   possible_usernames_.Put(
+-      PossibleUsernameFieldIdentifier(driver_id, renderer_id),
++      PossibleUsernameFieldIdentifier{driver_id, renderer_id},
+       PossibleUsernameData(GetSignonRealm(driver->GetLastCommittedURL()),
+                            renderer_id, value, base::Time::Now(), driver_id,
+                            autocomplete_attribute_has_username, is_likely_otp));
+diff -up chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
+--- chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -1567,7 +1567,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOut
  
        // Issue readbacks from the surfaces:
        for (size_t i = 0; i < CopyOutputResult::kNV12MaxPlanes; ++i) {
@@ -115,10 +270,10 @@ diff -up chromium-119.0.6045.59/components/viz/service/display_embedder/skia_out
          SkImageInfo dst_info = SkImageInfo::Make(
              size, (i == 0) ? kAlpha_8_SkColorType : kR8G8_unorm_SkColorType,
              kUnpremul_SkAlphaType);
-diff -up chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matching_constructor chromium-119.0.6045.59/content/browser/download/save_package.cc
---- chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/content/browser/download/save_package.cc	2023-10-30 16:51:02.271151512 +0100
-@@ -769,8 +769,8 @@ void SavePackage::Finish() {
+diff -up chromium-120.0.6099.56/content/browser/download/save_package.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/download/save_package.cc
+--- chromium-120.0.6099.56/content/browser/download/save_package.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/download/save_package.cc	2023-12-03 17:31:25.752420265 +0100
+@@ -767,8 +767,8 @@ void SavePackage::Finish() {
    if (download_) {
      std::vector<download::DownloadSaveItemData::ItemInfo> files;
      for (auto& item : saved_success_items_) {
@@ -129,52 +284,76 @@ diff -up chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matc
      }
      download::DownloadSaveItemData::AttachItemData(download_, std::move(files));
    }
-diff -up chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc
---- chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc	2023-10-30 17:38:09.351389984 +0100
-@@ -8567,7 +8567,7 @@ void RenderFrameHostImpl::SendFencedFram
+diff -up chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc
+--- chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc	2023-12-03 17:31:25.752420265 +0100
+@@ -3002,10 +3002,10 @@ DoGetKAnonymityData(sql::Database& db,
+ 
+   std::vector<StorageInterestGroup::KAnonymityData> k_anon_data;
+   while (interest_group_kanon_query.Step()) {
+-    k_anon_data.emplace_back(
++    k_anon_data.emplace_back() = {
+         /*key=*/interest_group_kanon_query.ColumnString(0),
+         /*is_k_anonymous=*/interest_group_kanon_query.ColumnBool(1),
+-        /*last_updated=*/interest_group_kanon_query.ColumnTime(2));
++        /*last_updated=*/interest_group_kanon_query.ColumnTime(2)};
+   }
+   if (!interest_group_kanon_query.Succeeded()) {
+     return absl::nullopt;
+diff -up chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc
+--- chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc	2023-12-03 20:49:28.059042672 +0100
+@@ -8685,7 +8685,7 @@ void RenderFrameHostImpl::SendFencedFram
    for (const blink::FencedFrame::ReportingDestination& destination :
         destinations) {
      SendFencedFrameReportingBeaconInternal(
 -        DestinationEnumEvent(event_type, event_data), destination,
 +        DestinationEnumEvent{event_type, event_data}, destination,
-         /*from_renderer=*/true, attribution_reporting_runtime_features,
-         GetFrameTreeNodeId());
+         /*from_renderer=*/true, attribution_reporting_runtime_features);
    }
-@@ -8603,7 +8603,7 @@ void RenderFrameHostImpl::SendFencedFram
+ }
+@@ -8720,7 +8720,7 @@ void RenderFrameHostImpl::SendFencedFram
    }
  
    SendFencedFrameReportingBeaconInternal(
 -      DestinationURLEvent(destination_url),
 +      DestinationURLEvent{destination_url},
        blink::FencedFrame::ReportingDestination::kBuyer,
-       /*from_renderer=*/true, attribution_reporting_runtime_features,
-       GetFrameTreeNodeId());
-@@ -8703,8 +8703,8 @@ void RenderFrameHostImpl::MaybeSendFence
+       /*from_renderer=*/true, attribution_reporting_runtime_features);
+ }
+@@ -8820,7 +8820,7 @@ void RenderFrameHostImpl::MaybeSendFence
          data = info->data;
        }
        initiator_rfh->SendFencedFrameReportingBeaconInternal(
--          DestinationEnumEvent(blink::kFencedFrameTopNavigationBeaconType,
--                               data),
-+          DestinationEnumEvent{blink::kFencedFrameTopNavigationBeaconType,
-+                               data},
-           destination,
+-          AutomaticBeaconEvent(event_type, data), destination,
++          AutomaticBeaconEvent{event_type, data}, destination,
            /*from_renderer=*/false, attribution_reporting_features,
-           GetFrameTreeNodeId(), navigation_request.GetNavigationId());
-@@ -8717,8 +8717,8 @@ void RenderFrameHostImpl::MaybeSendFence
+           navigation_request.GetNavigationId());
+     }
+@@ -8832,7 +8832,7 @@ void RenderFrameHostImpl::MaybeSendFence
      for (blink::FencedFrame::ReportingDestination destination :
           info->destinations) {
        initiator_rfh->SendFencedFrameReportingBeaconInternal(
--          DestinationEnumEvent(blink::kFencedFrameTopNavigationBeaconType,
--                               info->data),
-+          DestinationEnumEvent{blink::kFencedFrameTopNavigationBeaconType,
-+                               info->data},
-           destination,
+-          AutomaticBeaconEvent(event_type, info->data), destination,
++          AutomaticBeaconEvent{event_type, info->data}, destination,
            /*from_renderer=*/false, info->attribution_reporting_runtime_features,
-           GetFrameTreeNodeId(), navigation_request.GetNavigationId());
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h
---- chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor	2023-10-26 18:17:24.000000000 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h	2023-10-30 16:51:02.262151288 +0100
+           navigation_request.GetNavigationId());
+     }
+diff -up chromium-120.0.6099.56/net/dns/host_resolver_cache.cc.no_matching_constructor chromium-120.0.6099.56/net/dns/host_resolver_cache.cc
+--- chromium-120.0.6099.56/net/dns/host_resolver_cache.cc.no_matching_constructor	2023-11-29 22:40:07.000000000 +0100
++++ chromium-120.0.6099.56/net/dns/host_resolver_cache.cc	2023-12-03 17:31:25.754420303 +0100
+@@ -368,7 +368,7 @@ void HostResolverCache::Set(
+ 
+   std::string domain_name = result->domain_name();
+   entries_.emplace(
+-      Key(std::move(domain_name), network_anonymization_key),
++      Key{std::move(domain_name), network_anonymization_key},
+       Entry(std::move(result), source, secure, staleness_generation));
+ 
+   if (entries_.size() > max_entries_) {
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h
+--- chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor	2023-11-29 22:40:12.000000000 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h	2023-12-03 17:31:25.754420303 +0100
 @@ -96,7 +96,7 @@ class PLATFORM_EXPORT FontPalette : publ
        Color::ColorSpace color_interpolation_space,
        absl::optional<Color::HueInterpolationMethod> hue_interpolation_method) {
@@ -193,9 +372,9 @@ diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_p
    }
  
    double GetAlphaMultiplier() const {
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
---- chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor	2023-10-26 18:17:24.000000000 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc	2023-10-30 16:51:02.261151263 +0100
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
+--- chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor	2023-11-29 22:40:12.000000000 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc	2023-12-03 17:31:25.755420323 +0100
 @@ -31,7 +31,7 @@ Vector<FontPalette::FontPaletteOverride>
          color_interpolation_space, hue_interpolation_method, start_color,
          end_color, percentage, alpha_multiplier);
@@ -205,113 +384,22 @@ diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palett
      result_color_records.push_back(result_color_record);
    }
    return result_color_records;
-diff -up chromium-119.0.6045.59/ui/gtk/gtk_ui.cc.no_matching_constructor chromium-119.0.6045.59/ui/gtk/gtk_ui.cc
---- chromium-119.0.6045.59/ui/gtk/gtk_ui.cc.no_matching_constructor	2023-10-26 18:18:14.000000000 +0200
-+++ chromium-119.0.6045.59/ui/gtk/gtk_ui.cc	2023-10-30 16:51:02.272151537 +0100
-@@ -993,11 +993,11 @@ ui::DisplayConfig GtkUi::GetDisplayConfi
-     GdkRectangle geometry;
-     gdk_monitor_get_geometry(monitor, &geometry);
-     int monitor_scale = std::max(1, gdk_monitor_get_scale_factor(monitor));
--    config.display_geometries.emplace_back(
-+    config.display_geometries.emplace_back() = {
-         gfx::Rect(monitor_scale * geometry.x, monitor_scale * geometry.y,
-                   monitor_scale * geometry.width,
-                   monitor_scale * geometry.height),
--        monitor_scale * font_scale);
-+        static_cast<float>(monitor_scale * font_scale)};
-   }
-   return config;
- }
-diff -up chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc.me chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc
---- chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc.me	2023-10-31 18:14:49.275728099 +0100
-+++ chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc	2023-10-31 18:19:54.599223239 +0100
-@@ -221,13 +221,13 @@ PersistentSparseHistogramDataManager::Lo
-     // The sample-record could be for any sparse histogram. Add the reference
-     // to the appropriate collection for later use.
-     if (found_id == match_id) {
--      found_records.emplace_back(ref, value);
-+      found_records.emplace_back() = {ref, value};
-       found = true;
+diff -up chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp.no_matching_constructor chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp
+--- chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp.no_matching_constructor	2023-11-29 22:41:46.000000000 +0100
++++ chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp	2023-12-03 17:31:25.756420342 +0100
+@@ -491,7 +491,7 @@ void CPDF_RenderStatus::ProcessClipPath(
      } else {
-       std::vector<ReferenceAndSample>* samples =
-           GetSampleMapRecordsWhileLocked(found_id);
-       CHECK(samples);
--      samples->emplace_back(ref, value);
-+      samples->emplace_back() = {ref, value};
+       m_pDevice->SetClip_PathFill(
+           *pPath, &mtObj2Device,
+-          CFX_FillRenderOptions(ClipPath.GetClipType(i)));
++          CFX_FillRenderOptions{ClipPath.GetClipType(i)});
      }
    }
  
-diff -up chromium-119.0.6045.59/net/dns/host_resolver_cache.cc.me chromium-119.0.6045.59/net/dns/host_resolver_cache.cc
---- chromium-119.0.6045.59/net/dns/host_resolver_cache.cc.me	2023-10-31 20:48:19.153868338 +0100
-+++ chromium-119.0.6045.59/net/dns/host_resolver_cache.cc	2023-10-31 20:51:37.634526549 +0100
-@@ -368,7 +368,7 @@ void HostResolverCache::Set(
- 
-   std::string domain_name = result->domain_name();
-   entries_.emplace(
--      Key(std::move(domain_name), network_anonymization_key),
-+      Key{std::move(domain_name), network_anonymization_key},
-       Entry(std::move(result), source, secure, staleness_generation));
- 
-   if (entries_.size() > max_entries_) {
-diff -up chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc.me chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc
---- chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc.me	2023-10-31 22:32:58.995997897 +0100
-+++ chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc	2023-10-31 22:33:28.290520601 +0100
-@@ -1733,10 +1733,10 @@ std::unique_ptr<AutofillProfile> Autofil
-     }
- 
-     base::span<const uint8_t> observations_data = s.ColumnBlob(3);
--    field_type_values.emplace_back(
-+    field_type_values.emplace_back() = {
-         type, s.ColumnString16(1), s.ColumnInt(2),
-         std::vector<uint8_t>(observations_data.begin(),
--                             observations_data.end()));
-+                             observations_data.end())};
- 
-     if (type == ADDRESS_HOME_COUNTRY) {
-       country_code = base::UTF16ToUTF8(s.ColumnString16(1));
-diff -up chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc.than chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc
---- chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc.than	2023-10-31 22:41:22.850233005 +0100
-+++ chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc	2023-10-31 22:42:37.276931933 +0100
-@@ -625,7 +625,7 @@ void PasswordManager::OnUserModifiedNonP
-   // |driver| might be empty on iOS or in tests.
-   int driver_id = driver ? driver->GetId() : 0;
-   possible_usernames_.Put(
--      PossibleUsernameFieldIdentifier(driver_id, renderer_id),
-+      PossibleUsernameFieldIdentifier{driver_id, renderer_id},
-       PossibleUsernameData(GetSignonRealm(driver->GetLastCommittedURL()),
-                            renderer_id, value, base::Time::Now(), driver_id,
-                            autocomplete_attribute_has_username, is_likely_otp));
-diff -up chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc.than chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc
---- chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc.than	2023-10-31 23:31:08.438267908 +0100
-+++ chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc	2023-10-31 23:32:08.979358711 +0100
-@@ -2854,10 +2854,10 @@ DoGetKAnonymityData(sql::Database& db,
- 
-   std::vector<StorageInterestGroup::KAnonymityData> k_anon_data;
-   while (interest_group_kanon_query.Step()) {
--    k_anon_data.emplace_back(
-+    k_anon_data.emplace_back() = {
-         /*key=*/interest_group_kanon_query.ColumnString(0),
-         /*is_k_anonymous=*/interest_group_kanon_query.ColumnBool(1),
--        /*last_updated=*/interest_group_kanon_query.ColumnTime(2));
-+        /*last_updated=*/interest_group_kanon_query.ColumnTime(2)};
-   }
-   if (!interest_group_kanon_query.Succeeded()) {
-     return absl::nullopt;
-diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc.than chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc
---- chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc.than	2023-11-01 11:19:42.745395797 +0100
-+++ chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc	2023-11-01 11:22:16.670920679 +0100
-@@ -1881,7 +1881,7 @@ void FederatedAuthRequestImpl::ShowError
-       base::BindOnce(&FederatedAuthRequestImpl::CompleteRequestWithError,
-                      weak_ptr_factory_.GetWeakPtr()));
-   absl::optional<TokenError> token_error =
--      error ? absl::make_optional<TokenError>(error->code, error->url)
-+      error ? absl::make_optional<TokenError>({error->code, error->url})
-             : absl::nullopt;
- 
-   // TODO(crbug.com/1485710): Refactor IdentityCredentialTokenError
---- chromium-119.0.6045.59/ui/base/wayland/color_manager_util.h.no_matching_constructor	2023-10-26 18:18:14.000000000 +0200
-+++ chromium-119.0.6045.59/ui/base/wayland/color_manager_util.h	2023-11-01 17:29:54.269820415 +0100
-@@ -52,53 +52,53 @@
+diff -up chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h.no_matching_constructor chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h
+--- chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h.no_matching_constructor	2023-11-29 22:40:44.000000000 +0100
++++ chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h	2023-12-03 17:31:25.755420323 +0100
+@@ -52,53 +52,53 @@ constexpr auto kChromaticityMap = base::
      zcr_color_manager_v1_chromaticity_names,
      PrimaryVersion>(
      {{ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT601_525_LINE,
@@ -391,7 +479,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  
  // A map from the zcr_color_manager_v1 eotf_names enum values
  // representing well-known EOTFs, to their equivalent TransferIDs.
-@@ -107,68 +107,68 @@
+@@ -107,68 +107,68 @@ constexpr auto kEotfMap = base::MakeFixe
      zcr_color_manager_v1_eotf_names,
      TransferVersion>({
      {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -498,7 +586,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  });
  
  // A map from the SDR zcr_color_manager_v1 eotf_names enum values
-@@ -177,18 +177,18 @@
+@@ -177,18 +177,18 @@ constexpr auto kEotfMap = base::MakeFixe
  constexpr auto kTransferMap =
      base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>({
          {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -524,7 +612,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
      });
  
  // A map from the HDR zcr_color_manager_v1 eotf_names enum values
-@@ -197,70 +197,70 @@
+@@ -197,70 +197,70 @@ constexpr auto kTransferMap =
  constexpr auto kHDRTransferMap =
      base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>(
          {{ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -628,76 +716,27 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  
  zcr_color_manager_v1_chromaticity_names ToColorManagerChromaticity(
      gfx::ColorSpace::PrimaryID primaryID,
-@@ -283,4 +283,4 @@
+@@ -283,4 +283,4 @@ zcr_color_manager_v1_eotf_names ToColorM
  
  }  // namespace ui::wayland
  
 -#endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
 \ Kein Zeilenumbruch am Dateiende.
 +#endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.me chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.me	2023-11-01 20:46:15.997861278 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc	2023-11-01 20:49:33.603371680 +0100
-@@ -58,13 +58,13 @@ EmbeddedPermissionPromptPreviouslyGrante
- std::vector<EmbeddedPermissionPromptPreviouslyGrantedView::ButtonConfiguration>
- EmbeddedPermissionPromptPreviouslyGrantedView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
--  buttons.emplace_back(
-+  buttons.emplace_back() = {
-       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_ALLOWING),
--      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal);
-+      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal};
- 
--  buttons.emplace_back(
-+  buttons.emplace_back() = {
-       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_STOP_ALLOWING),
--      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal);
-+      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal};
-   return buttons;
- }
- 
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.than chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.than	2023-11-01 20:52:29.005464494 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc	2023-11-01 21:14:12.741859604 +0100
-@@ -56,12 +56,12 @@ std::vector<EmbeddedPermissionPromptAskV
- EmbeddedPermissionPromptAskView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
-   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
--    buttons.emplace_back(
-+    buttons.emplace_back() = {
-         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
--        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
-+        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+diff -up chromium-120.0.6099.56/ui/gtk/gtk_ui.cc.no_matching_constructor chromium-120.0.6099.56/ui/gtk/gtk_ui.cc
+--- chromium-120.0.6099.56/ui/gtk/gtk_ui.cc.no_matching_constructor	2023-11-29 22:40:44.000000000 +0100
++++ chromium-120.0.6099.56/ui/gtk/gtk_ui.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -1013,11 +1013,11 @@ ui::DisplayConfig GtkUi::GetDisplayConfi
+     GdkRectangle geometry;
+     gdk_monitor_get_geometry(monitor, &geometry);
+     int monitor_scale = std::max(1, gdk_monitor_get_scale_factor(monitor));
+-    config.display_geometries.emplace_back(
++    config.display_geometries.emplace_back() = {
+         gfx::Rect(monitor_scale * geometry.x, monitor_scale * geometry.y,
+                   monitor_scale * geometry.width,
+                   monitor_scale * geometry.height),
+-        monitor_scale * font_scale);
++        static_cast<float>(monitor_scale * font_scale)};
    }
--  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
--                       ButtonType::kAllow, ui::ButtonStyle::kTonal);
-+  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
-+                       ButtonType::kAllow, ui::ButtonStyle::kTonal};
-   return buttons;
- }
- 
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.me chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.me	2023-11-01 21:22:02.222646903 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h	2023-11-01 21:19:58.769619393 +0100
-@@ -72,6 +72,7 @@ class EmbeddedPermissionPromptBaseView :
-   struct RequestLineConfiguration {
-     const raw_ptr<const gfx::VectorIcon> icon;
-     std::u16string message;
-+    RequestLineConfiguration(auto i, auto m) : icon(i), message(m) { }
-   };
- 
-   struct ButtonConfiguration {
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.than chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.than	2023-11-01 21:25:31.118626473 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc	2023-11-01 21:30:06.383340274 +0100
-@@ -48,8 +48,8 @@ EmbeddedPermissionPromptPolicyView::GetR
- std::vector<EmbeddedPermissionPromptPolicyView::ButtonConfiguration>
- EmbeddedPermissionPromptPolicyView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
--  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
--                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal);
-+  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
-+                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal};
-   return buttons;
+   return config;
  }
- 
diff --git a/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch b/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
new file mode 100644
index 0000000000000..e80ed715aaf29
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
@@ -0,0 +1,28 @@
+diff -up chromium-120.0.6099.35/build/config/compiler/BUILD.gn.than chromium-120.0.6099.35/build/config/compiler/BUILD.gn
+--- chromium-120.0.6099.35/build/config/compiler/BUILD.gn.than	2023-11-26 17:02:25.647022746 +0100
++++ chromium-120.0.6099.35/build/config/compiler/BUILD.gn	2023-11-26 17:15:58.025585358 +0100
+@@ -616,24 +616,6 @@ config("compiler") {
+       }
+     }
+ 
+-    # TODO(crbug.com/1488374): This causes binary size growth and potentially
+-    # other problems.
+-    # TODO(crbug.com/1491036): This isn't supported by Cronet's mainline llvm version.
+-    if (default_toolchain != "//build/toolchain/cros:target" &&
+-        !llvm_android_mainline) {
+-      cflags += [
+-        "-mllvm",
+-        "-split-threshold-for-reg-with-hint=0",
+-      ]
+-      if (use_thin_lto && is_a_target_toolchain) {
+-        if (is_win) {
+-          ldflags += [ "-mllvm:-split-threshold-for-reg-with-hint=0" ]
+-        } else {
+-          ldflags += [ "-Wl,-mllvm,-split-threshold-for-reg-with-hint=0" ]
+-        }
+-      }
+-    }
+-
+     # TODO(crbug.com/1235145): Investigate why/if this should be needed.
+     if (is_win) {
+       cflags += [ "/clang:-ffp-contract=off" ]
diff --git a/srcpkgs/chromium/patches/chromium-117-typename.patch b/srcpkgs/chromium/patches/chromium-120-typename.patch
similarity index 83%
rename from srcpkgs/chromium/patches/chromium-117-typename.patch
rename to srcpkgs/chromium/patches/chromium-120-typename.patch
index d3b00e7323603..9a2d878b12b54 100644
--- a/srcpkgs/chromium/patches/chromium-117-typename.patch
+++ b/srcpkgs/chromium/patches/chromium-120-typename.patch
@@ -1,3 +1,23 @@
+--- chromium-120.0.6099.56/base/containers/map_util.h.me	2023-12-02 19:00:19.696801563 +0100
++++ chromium-120.0.6099.56/base/containers/map_util.h	2023-12-02 19:00:47.049337547 +0100
+@@ -42,7 +42,7 @@
+ template <typename Map,
+           typename Key,
+           typename MappedElementType =
+-              std::pointer_traits<internal::MappedType<Map>>::element_type>
++              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
+ constexpr const MappedElementType* FindPtrOrNull(const Map& map,
+                                                  const Key& key) {
+   auto it = map.find(key);
+@@ -58,7 +58,7 @@
+ template <typename Map,
+           typename Key,
+           typename MappedElementType =
+-              std::pointer_traits<internal::MappedType<Map>>::element_type>
++              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
+ constexpr MappedElementType* FindPtrOrNull(Map& map, const Key& key) {
+   auto it = map.find(key);
+   return it != map.end() ? std::to_address(it->second) : nullptr;
 diff -up chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc.me chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc
 --- chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc.me	2023-06-17 14:50:56.342591702 +0200
 +++ chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc	2023-06-17 14:57:48.024377375 +0200
@@ -162,3 +182,24 @@ diff -up chromium-117.0.5938.62/components/supervised_user/core/browser/proto_fe
  
    // Remove fetcher under key from requests_in_flight_.
    void Remove(KeyType key);
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h.me chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h
+--- chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h.me	2023-12-04 00:29:35.197209538 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h	2023-12-04 00:30:24.436233249 +0100
+@@ -220,7 +220,7 @@ class PairAsyncIterable {
+  private:
+   virtual IterationSource* CreateIterationSource(
+       ScriptState* script_state,
+-      IterationSource::Kind kind,
++      typename IterationSource::Kind kind,
+       ExceptionState& exception_state) = 0;
+ };
+ 
+@@ -262,7 +262,7 @@ class ValueAsyncIterable {
+  private:
+   virtual IterationSource* CreateIterationSource(
+       ScriptState* script_state,
+-      IterationSource::Kind kind,
++      typename IterationSource::Kind kind,
+       ExceptionState& exception_state) = 0;
+ };
+ 
diff --git a/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch b/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
new file mode 100644
index 0000000000000..b06e29f29047a
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
@@ -0,0 +1,51 @@
+diff -up chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc
+--- chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:37.000000000 +0200
++++ chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc	2023-06-17 16:53:20.216628557 +0200
+@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui
+ void CdmPromiseAdapter::Clear(ClearReason reason) {
+   // Reject all outstanding promises.
+   DCHECK(thread_checker_.CalledOnValidThread());
+-  for (auto& [promise_id, promise] : promises_) {
++  for (auto& [p_i, p_e] : promises_) {
++    auto& promise_id = p_i;
++    auto& promise = p_e;
+     TRACE_EVENT_NESTABLE_ASYNC_END1(
+         "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id),
+         "status", "cleared");
+diff -up chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc
+--- chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me	2023-06-19 08:04:02.287072722 +0200
++++ chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc	2023-06-19 08:18:24.576814950 +0200
+@@ -1393,7 +1393,8 @@ void ServiceWorkerContextWrapper::MaybeP
+     return;
+   }
+ 
+-  auto [document_url, key, callback] = std::move(*request);
++  auto [d_u, key, callback] = std::move(*request);
++  auto document_url = d_u;
+ 
+   DCHECK(document_url.is_valid());
+   TRACE_EVENT1("ServiceWorker",
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc.me chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
+--- chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc.me	2023-12-03 22:17:50.922083200 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc	2023-12-03 22:22:55.437484343 +0100
+@@ -3447,7 +3447,8 @@ void GridLayoutAlgorithm::PlaceGridItems
+   DCHECK(out_row_break_between);
+ 
+   const auto& container_space = ConstraintSpace();
+-  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
++  const auto& [grid_items, l_d, tree_size] = sizing_tree.TreeRootData();
++  const auto& layout_data = l_d;
+ 
+   const auto* cached_layout_subtree = container_space.GetGridLayoutSubtree();
+   const auto container_writing_direction =
+@@ -3611,7 +3612,9 @@ void GridLayoutAlgorithm::PlaceGridItems
+ 
+   // TODO(ikilpatrick): Update |SetHasSeenAllChildren| and early exit if true.
+   const auto& constraint_space = ConstraintSpace();
+-  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
++  const auto& [g_i, l_d, tree_size] = sizing_tree.TreeRootData();
++  const auto& grid_items = g_i;
++  const auto& layout_data = l_d;
+ 
+   const auto* cached_layout_subtree = constraint_space.GetGridLayoutSubtree();
+   const auto container_writing_direction =
diff --git a/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch b/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
index afcdae179850a..b3dd2c33f0f21 100644
--- a/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
+++ b/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
@@ -1,5 +1,5 @@
---- a/base/allocator/partition_allocator/tagging.cc
-+++ b/base/allocator/partition_allocator/tagging.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/tagging.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/tagging.cc
 @@ -28,13 +28,25 @@
  #endif
  #endif
diff --git a/srcpkgs/chromium/patches/musl-no-execinfo.patch b/srcpkgs/chromium/patches/musl-no-execinfo.patch
index fac2b6d190e78..7407f1b9db38a 100644
--- a/srcpkgs/chromium/patches/musl-no-execinfo.patch
+++ b/srcpkgs/chromium/patches/musl-no-execinfo.patch
@@ -83,12 +83,3 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1
  // StackTrace::OutputToStream() is not implemented under uclibc, nor AIX.
  // See https://crbug.com/706728
  
-@@ -156,7 +156,7 @@
- 
- #endif  // !defined(__UCLIBC__) && !defined(_AIX)
- 
--#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID)
-+#if (BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !BUILDFLAG(IS_ANDROID)
- #if !BUILDFLAG(IS_IOS)
- static char* newArray() {
-   // Clang warns about the mismatched new[]/delete if they occur in the same
diff --git a/srcpkgs/chromium/patches/musl-no-mallinfo.patch b/srcpkgs/chromium/patches/musl-no-mallinfo.patch
index cd728ecfb112d..a58ee08a435a0 100644
--- a/srcpkgs/chromium/patches/musl-no-mallinfo.patch
+++ b/srcpkgs/chromium/patches/musl-no-mallinfo.patch
@@ -101,8 +101,8 @@ musl does not implement mallinfo()/mallinfo2()
  
  /* Define to 1 if you have the <malloc.h> header file. */
  #define HAVE_MALLOC_H 1
---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
-+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
 @@ -717,7 +717,7 @@
  
  #endif  // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID)
@@ -112,8 +112,8 @@ musl does not implement mallinfo()/mallinfo2()
  SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW {
    base::SimplePartitionStatsDumper allocator_dumper;
    Allocator()->DumpStats("malloc", true, &allocator_dumper);
---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
-+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
 @@ -24,7 +24,7 @@
  #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
  
diff --git a/srcpkgs/chromium/patches/musl-partition-atfork.patch b/srcpkgs/chromium/patches/musl-partition-atfork.patch
index 2910aa2bbf9b1..35d810055fbb5 100644
--- a/srcpkgs/chromium/patches/musl-partition-atfork.patch
+++ b/srcpkgs/chromium/patches/musl-partition-atfork.patch
@@ -1,5 +1,5 @@
---- a/base/allocator/partition_allocator/partition_root.cc
-+++ b/base/allocator/partition_allocator/partition_root.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc
 @@ -239,7 +239,7 @@
    if (!g_global_init_called.compare_exchange_strong(expected, true))
      return;
diff --git a/srcpkgs/chromium/patches/no-mte.patch b/srcpkgs/chromium/patches/no-mte.patch
deleted file mode 100644
index 56167e1e5c576..0000000000000
--- a/srcpkgs/chromium/patches/no-mte.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/base/allocator/partition_allocator/partition_alloc_config.h
-+++ b/base/allocator/partition_allocator/partition_alloc_config.h
-@@ -153,7 +153,7 @@
-    defined(ARCH_CPU_LITTLE_ENDIAN))
- 
- #define PA_CONFIG_HAS_MEMORY_TAGGING()              \
--  (defined(ARCH_CPU_ARM64) && defined(__clang__) && \
-+  (0 && defined(ARCH_CPU_ARM64) && defined(__clang__) && \
-    !defined(ADDRESS_SANITIZER) &&                   \
-    (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
- 
diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index b023946f3ec7b..fc3a5bc5aae85 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -1,8 +1,8 @@
 # Template file for 'chromium'
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
-version=119.0.6045.105
-revision=3
+version=120.0.6099.109
+revision=1
 archs="i686* x86_64* aarch64* armv7l*"
 hostmakedepends="
  $(vopt_if clang "clang lld llvm15")
@@ -10,12 +10,12 @@ hostmakedepends="
  libepoxy-devel libevent-devel libglib-devel"
 makedepends="
  alsa-lib-devel libdav1d-devel brotli-devel cups-devel elfutils-devel ffmpeg-devel
- fontconfig-devel freetype-devel gtk+3-devel jsoncpp-devel libXScrnSaver-devel
+ fontconfig-devel freetype-devel gtk+3-devel libXScrnSaver-devel
  libXcomposite-devel libXcursor-devel libXdamage-devel libXi-devel libXrandr-devel
  libavif-devel libcap-devel libcurl-devel libdrm-devel libevent-devel
  libexif-devel libflac-devel libgcrypt-devel libjpeg-turbo-devel libmtp-devel
  libpng-devel libva-devel libwebp-devel libxml2-devel libxshmfence-devel
- libxslt-devel woff2-devel minizip-devel mit-krb5-devel nss-devel opus-devel
+ libxslt-devel minizip-devel mit-krb5-devel nss-devel opus-devel
  pciutils-devel snappy-devel speech-dispatcher-devel speex-devel
  xcb-proto zlib-devel libaom-devel libffi-devel libevdev-devel
  $(vopt_if pipewire pipewire-devel)
@@ -27,7 +27,7 @@ maintainer="Duncaen <duncaen@voidlinux.org>"
 license="BSD-3-Clause"
 homepage="https://www.chromium.org/"
 distfiles="https://commondatastorage.googleapis.com/chromium-browser-official/${pkgname}-${version}.tar.xz"
-checksum=73cb8c39e928f8c627d747d37a3b020f08913ef5508f893758d70bdbd545dbcf
+checksum=87c00c525ee07c2233b78dbece1496b697f686244a67fac2c71e4a30bd96849b
 
 lib32disabled=yes
 
@@ -52,7 +52,7 @@ if [ "$CROSS_BUILD" ]; then
 	 $(vopt_if pipewire pipewire-devel) ffmpeg-devel opus-devel pango-devel libva-devel
 	 libcurl-devel snappy-devel libXrandr-devel libXcomposite-devel cups-devel
 	 mit-krb5-devel alsa-lib-devel libXdamage-devel libepoxy-devel libevdev-devel
-	 libavif-devel libaom-devel jsoncpp-devel woff2-devel libdav1d-devel libflac-devel
+	 libavif-devel libaom-devel libdav1d-devel libflac-devel
 	 libdrm-devel libgbm-devel"
 fi
 
@@ -82,6 +82,9 @@ post_patch() {
 	# allow system dependencies in "official builds"
 	vsed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \
 		tools/generate_shim_headers/generate_shim_headers.py
+
+	mkdir -p third_party/node/linux/node-linux-x64/bin
+	ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/
 }
 
 _setup_clang() {
@@ -144,6 +147,8 @@ do_configure() {
 	# use_system_v8=1
 	# bzip2 xdg_utils speex
 	# XXX: harfbuzz-ng use builtin one until system-wide is updated >=3.0.0
+	# libcxx https://github.com/llvm/llvm-project/issues/61705:
+	# snappy
 	system="
 		ffmpeg
 		flac
@@ -157,7 +162,6 @@ do_configure() {
 		libxml
 		libxslt
 		opus
-		snappy
 	"
 
 	# remove build scripts for system provided dependencies - basically does the
@@ -192,7 +196,7 @@ do_configure() {
 		'clang_base_path="/usr"'
 
 		"gold_path=\"${XBPS_CROSS_BASE}/usr/bin/ld.gold\""
-		'use_custom_libcxx=false'
+		'use_custom_libcxx=true' # https://github.com/llvm/llvm-project/issues/61705
 		'use_gold=false'
 
 		'rust_sysroot_absolute="/usr"'
@@ -304,7 +308,6 @@ do_install() {
 	vmkdir usr/lib/chromium/locales
 	vcopy "out/Release/locales/*.pak" usr/lib/chromium/locales
 
-	vinstall ${FILESDIR}/chromium.desktop 644 usr/share/applications
 
 	vinstall out/Release/icudtl.dat 0644 usr/lib/chromium
 
@@ -322,4 +325,14 @@ do_install() {
 	vbin ${FILESDIR}/chromium.sh chromium
 	vlicense LICENSE
 	ln -sf /usr/lib/chromium/chromedriver ${DESTDIR}/usr/bin/chromedriver
+
+	vinstall chrome/installer/linux/common/desktop.template 644 usr/share/applications chromium.desktop
+	vman chrome/app/resources/manpage.1.in chromium.1
+
+	sed -i \
+		-e 's/@@MENUNAME@@/Chromium/g' \
+		-e 's/@@PACKAGE@@/chromium/g' \
+		-e 's/@@USR_BIN_SYMLINK_NAME@@/chromium/g' \
+		${DESTDIR}/usr/share/man/man1/chromium.1 \
+		${DESTDIR}/usr/share/applications/chromium.desktop
 }
diff --git a/srcpkgs/chromium/update b/srcpkgs/chromium/update
index c035a8fe1c3b3..af42867275488 100644
--- a/srcpkgs/chromium/update
+++ b/srcpkgs/chromium/update
@@ -1,2 +1,2 @@
-site='https://omahaproxy.appspot.com/all'
-pattern='linux,stable,\K[^,]*'
+site='https://chromiumdash.appspot.com/fetch_releases?channel=Stable&platform=Linux&num=1&offset=0'
+pattern='"version":\s*"\K[^,]+(?=")'

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PR PATCH] [Updated] chromium: update to 120.0.6099.109.
  2023-12-13 17:44 [PR PATCH] chromium: update to 120.0.6099.109 Duncaen
                   ` (2 preceding siblings ...)
  2023-12-13 18:13 ` Duncaen
@ 2023-12-13 23:44 ` Duncaen
  2023-12-14 23:13 ` [PR PATCH] [Merged]: " Duncaen
  4 siblings, 0 replies; 6+ messages in thread
From: Duncaen @ 2023-12-13 23:44 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 412 bytes --]

There is an updated pull request by Duncaen against master on the void-packages repository

https://github.com/Duncaen/void-packages chromium-120
https://github.com/void-linux/void-packages/pull/47739

chromium: update to 120.0.6099.109.
[ci skip]

* [x] x86_64-glibc
* [x] x86_64-musl
* [ ] aarch64-musl
* [ ] i686

A patch file from https://github.com/void-linux/void-packages/pull/47739.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-chromium-120-47739.patch --]
[-- Type: text/x-diff, Size: 126015 bytes --]

From c8a3c6317caedd5bb65f7eb2c0bad6201bdb5372 Mon Sep 17 00:00:00 2001
From: Duncaen <duncaen@voidlinux.org>
Date: Wed, 13 Dec 2023 14:53:36 +0100
Subject: [PATCH] chromium: update to 120.0.6099.109.

---
 srcpkgs/chromium/files/chromium.desktop       | 112 ----
 .../files/musl-patches/libc++-musl.patch      |  12 +
 .../chromium-118-python-3.12-deprecated.patch | 138 -----
 ...karound_clang_bug-structured_binding.patch |  96 ----
 .../patches/chromium-119-constexpr.patch      |  12 -
 ...tVideoDecoder-flag-on-VA-API-devices.patch | 195 -------
 ...-119-nullptr_t-without-namespace-std.patch |  21 -
 ...a-use-separate-bo-to-verify-modifier.patch | 164 ------
 .../chromium-120-arm64-memory_tagging.patch   |  14 +
 ...hromium-120-disable-FFmpegAllowLists.patch |  12 +
 ...ble-GlobalMediaControlsCastStartStop.patch |  14 +
 ...chromium-120-el7-clang-build-failure.patch | 230 ++++++++
 ...ium-120-el7-clang-build-failure.patch.args |   1 +
 ...romium-120-el7-clang-version-warning.patch |  16 +
 .../chromium-120-gn-workaround-atspi.patch    |  13 +
 ...> chromium-120-missing-header-files.patch} |  11 -
 ...hromium-120-no_matching_constructor.patch} | 493 ++++++++++--------
 ...20-split-threshold-for-reg-with-hint.patch |  28 +
 ...name.patch => chromium-120-typename.patch} |  41 ++
 ...karound_clang_bug-structured_binding.patch |  51 ++
 ...x-aarch64-musl-memory-tagging-macros.patch |   4 +-
 .../chromium/patches/musl-no-execinfo.patch   |   9 -
 .../chromium/patches/musl-no-mallinfo.patch   |   8 +-
 .../patches/musl-partition-atfork.patch       |   4 +-
 srcpkgs/chromium/patches/no-mte.patch         |  11 -
 srcpkgs/chromium/template                     |  38 +-
 srcpkgs/chromium/update                       |   4 +-
 27 files changed, 734 insertions(+), 1018 deletions(-)
 delete mode 100644 srcpkgs/chromium/files/chromium.desktop
 create mode 100644 srcpkgs/chromium/files/musl-patches/libc++-musl.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-constexpr.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
 delete mode 100644 srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
 create mode 100644 srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
 create mode 100644 srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
 rename srcpkgs/chromium/patches/{chromium-119-missing-header-files.patch => chromium-120-missing-header-files.patch} (97%)
 rename srcpkgs/chromium/patches/{chromium-119-no_matching_constructor.patch => chromium-120-no_matching_constructor.patch} (67%)
 create mode 100644 srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
 rename srcpkgs/chromium/patches/{chromium-117-typename.patch => chromium-120-typename.patch} (83%)
 create mode 100644 srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
 delete mode 100644 srcpkgs/chromium/patches/no-mte.patch

diff --git a/srcpkgs/chromium/files/chromium.desktop b/srcpkgs/chromium/files/chromium.desktop
deleted file mode 100644
index 05788f7135daa..0000000000000
--- a/srcpkgs/chromium/files/chromium.desktop
+++ /dev/null
@@ -1,112 +0,0 @@
-[Desktop Entry]
-Name=Chromium
-# Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
-# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
-GenericName=Web Browser
-GenericName[ar]=متصفح الشبكة
-GenericName[bg]=Уеб браузър
-GenericName[ca]=Navegador web
-GenericName[cs]=WWW prohlížeč
-GenericName[da]=Browser
-GenericName[de]=Web-Browser
-GenericName[el]=Περιηγητής ιστού
-GenericName[en_GB]=Web Browser
-GenericName[es]=Navegador web
-GenericName[et]=Veebibrauser
-GenericName[fi]=WWW-selain
-GenericName[fr]=Navigateur Web
-GenericName[gu]=વેબ બ્રાઉઝર
-GenericName[he]=דפדפן אינטרנט
-GenericName[hi]=वेब ब्राउज़र
-GenericName[hu]=Webböngésző
-GenericName[it]=Browser Web
-GenericName[ja]=ウェブブラウザ
-GenericName[kn]=ಜಾಲ ವೀಕ್ಷಕ
-GenericName[ko]=웹 브라우저
-GenericName[lt]=Žiniatinklio naršyklė
-GenericName[lv]=Tīmekļa pārlūks
-GenericName[ml]=വെബ് ബ്രൌസര്‍
-GenericName[mr]=वेब ब्राऊजर
-GenericName[nb]=Nettleser
-GenericName[nl]=Webbrowser
-GenericName[pl]=Przeglądarka WWW
-GenericName[pt]=Navegador Web
-GenericName[pt_BR]=Navegador da Internet
-GenericName[ro]=Navigator de Internet
-GenericName[ru]=Веб-браузер
-GenericName[sl]=Spletni brskalnik
-GenericName[sv]=Webbläsare
-GenericName[ta]=இணைய உலாவி
-GenericName[th]=เว็บเบราว์เซอร์
-GenericName[tr]=Web Tarayıcı
-GenericName[uk]=Навігатор Тенет
-GenericName[zh_CN]=网页浏览器
-GenericName[zh_HK]=網頁瀏覽器
-GenericName[zh_TW]=網頁瀏覽器
-# Not translated in KDE, from Epiphany 2.26.1-0ubuntu1.
-GenericName[bn]=ওয়েব ব্রাউজার
-GenericName[fil]=Web Browser
-GenericName[hr]=Web preglednik
-GenericName[id]=Browser Web
-GenericName[or]=ଓ୍ବେବ ବ୍ରାଉଜର
-GenericName[sk]=WWW prehliadač
-GenericName[sr]=Интернет прегледник
-GenericName[te]=మహాతల అన్వేషి
-GenericName[vi]=Bộ duyệt Web
-# Gnome and KDE 3 uses Comment.
-Comment=Access the Internet
-Comment[ar]=الدخول إلى الإنترنت
-Comment[bg]=Достъп до интернет
-Comment[bn]=ইন্টারনেটটি অ্যাক্সেস করুন
-Comment[ca]=Accedeix a Internet
-Comment[cs]=Přístup k internetu
-Comment[da]=Få adgang til internettet
-Comment[de]=Internetzugriff
-Comment[el]=Πρόσβαση στο Διαδίκτυο
-Comment[en_GB]=Access the Internet
-Comment[es]=Accede a Internet.
-Comment[et]=Pääs Internetti
-Comment[fi]=Käytä internetiä
-Comment[fil]=I-access ang Internet
-Comment[fr]=Accéder à Internet
-Comment[gu]=ઇંટરનેટ ઍક્સેસ કરો
-Comment[he]=גישה אל האינטרנט
-Comment[hi]=इंटरनेट तक पहुंच स्थापित करें
-Comment[hr]=Pristup Internetu
-Comment[hu]=Internetelérés
-Comment[id]=Akses Internet
-Comment[it]=Accesso a Internet
-Comment[ja]=インターネットにアクセス
-Comment[kn]=ಇಂಟರ್ನೆಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ
-Comment[ko]=인터넷 연결
-Comment[lt]=Interneto prieiga
-Comment[lv]=Piekļūt internetam
-Comment[ml]=ഇന്റര്‍‌നെറ്റ് ആക്‌സസ് ചെയ്യുക
-Comment[mr]=इंटरनेटमध्ये प्रवेश करा
-Comment[nb]=Gå til Internett
-Comment[nl]=Verbinding maken met internet
-Comment[or]=ଇଣ୍ଟର୍ନେଟ୍ ପ୍ରବେଶ କରନ୍ତୁ
-Comment[pl]=Skorzystaj z internetu
-Comment[pt]=Aceder à Internet
-Comment[pt_BR]=Acessar a internet
-Comment[ro]=Accesaţi Internetul
-Comment[ru]=Доступ в Интернет
-Comment[sk]=Prístup do siete Internet
-Comment[sl]=Dostop do interneta
-Comment[sr]=Приступите Интернету
-Comment[sv]=Gå ut på Internet
-Comment[ta]=இணையத்தை அணுகுதல்
-Comment[te]=ఇంటర్నెట్‌ను ఆక్సెస్ చెయ్యండి
-Comment[th]=เข้าถึงอินเทอร์เน็ต
-Comment[tr]=İnternet'e erişin
-Comment[uk]=Доступ до Інтернету
-Comment[vi]=Truy cập Internet
-Comment[zh_CN]=访问互联网
-Comment[zh_HK]=連線到網際網路
-Comment[zh_TW]=連線到網際網路
-Exec=chromium %U
-Terminal=false
-Icon=chromium
-Type=Application
-Categories=GTK;Network;WebBrowser;
-MimeType=text/html;text/xml;application/xhtml+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
diff --git a/srcpkgs/chromium/files/musl-patches/libc++-musl.patch b/srcpkgs/chromium/files/musl-patches/libc++-musl.patch
new file mode 100644
index 0000000000000..b90a54daa8b49
--- /dev/null
+++ b/srcpkgs/chromium/files/musl-patches/libc++-musl.patch
@@ -0,0 +1,12 @@
+Source: https://git.alpinelinux.org/aports/tree/community/chromium/yes-musl.patch
+--- ./buildtools/third_party/libc++/__config_site.orig
++++ ./buildtools/third_party/libc++/__config_site
+@@ -18,7 +18,7 @@
+ /* #undef _LIBCPP_ABI_FORCE_MICROSOFT */
+ /* #undef _LIBCPP_HAS_NO_THREADS */
+ /* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */
+-/* #undef _LIBCPP_HAS_MUSL_LIBC */
++#define _LIBCPP_HAS_MUSL_LIBC 1
+ /* #undef _LIBCPP_HAS_THREAD_API_PTHREAD */
+ /* #undef _LIBCPP_HAS_THREAD_API_EXTERNAL */
+ /* #undef _LIBCPP_HAS_THREAD_API_WIN32 */
diff --git a/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch b/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
deleted file mode 100644
index 5837ae584117d..0000000000000
--- a/srcpkgs/chromium/patches/chromium-118-python-3.12-deprecated.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-diff -up chromium-115.0.5790.102/base/write_build_date_header.py.me chromium-115.0.5790.102/base/write_build_date_header.py
---- chromium-115.0.5790.102/base/write_build_date_header.py.me	2023-07-22 14:23:42.620679397 +0200
-+++ chromium-115.0.5790.102/base/write_build_date_header.py	2023-07-22 15:24:46.833310310 +0200
-@@ -17,7 +17,7 @@ def main():
-   args = argument_parser.parse_args()
- 
-   date_val = int(args.timestamp)
--  date = datetime.datetime.utcfromtimestamp(date_val)
-+  date =  datetime.datetime.fromtimestamp(date_val, datetime.timezone.utc)
-   output = ('// Generated by //base/write_build_date_header.py\n'
-             '#ifndef BASE_GENERATED_BUILD_DATE_TIMESTAMP \n'
-             f'#define BASE_GENERATED_BUILD_DATE_TIMESTAMP {date_val}'
-diff -up chromium-115.0.5790.102/build/write_buildflag_header.py.me chromium-115.0.5790.102/build/write_buildflag_header.py
---- chromium-115.0.5790.102/build/write_buildflag_header.py.me	2023-07-22 14:16:14.196975451 +0200
-+++ chromium-115.0.5790.102/build/write_buildflag_header.py	2023-07-22 14:20:24.977239994 +0200
-@@ -44,7 +44,7 @@ def GetOptions():
-   header_guard = cmdline_options.output.upper()
-   if header_guard[0].isdigit():
-     header_guard = '_' + header_guard
--  header_guard = re.sub('[^\w]', '_', header_guard)
-+  header_guard = re.sub(r'[^\w]', '_', header_guard)
-   header_guard += '_'
- 
-   # The actual output file is inside the gen dir.
-diff -up chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py.me chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py
---- chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py.me	2023-07-22 14:47:34.230764210 +0200
-+++ chromium-115.0.5790.102/components/resources/protobufs/binary_proto_generator.py	2023-07-22 15:11:50.360983383 +0200
-@@ -9,7 +9,8 @@
- """
- from __future__ import print_function
- import abc
--import imp
-+import types
-+import importlib
- import optparse
- import os
- import re
-@@ -40,6 +41,12 @@ class GoogleProtobufModuleImporter:
-         return filepath
-     return None
- 
-+  def load_source(name: str, path: str) -> types.ModuleType:
-+    spec = importlib.util.spec_from_file_location(name, path)
-+    module = importlib.util.module_from_spec(spec)
-+    spec.loader.exec_module(module)
-+    return module
-+
-   def _module_exists(self, fullname):
-     return self._fullname_to_filepath(fullname) is not None
- 
-@@ -68,7 +75,7 @@ class GoogleProtobufModuleImporter:
-       raise ImportError(fullname)
- 
-     filepath = self._fullname_to_filepath(fullname)
--    return imp.load_source(fullname, filepath)
-+    return load_source(fullname, filepath)
- 
- class BinaryProtoGenerator:
- 
-diff -up chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py.me chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py
---- chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py.me	2023-07-22 15:17:19.114258801 +0200
-+++ chromium-115.0.5790.102/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py	2023-07-22 15:17:43.368200491 +0200
-@@ -32,7 +32,7 @@ def FilterLine(filename, line, output):
-     return
- 
-   if line.startswith("goog.provide"):
--    match = re.match("goog.provide\('([^']+)'\);", line)
-+    match = re.match(r"goog.provide\('([^']+)'\);", line)
-     if not match:
-       print("Invalid goog.provide line in %s:\n%s" % (filename, line))
-       sys.exit(1)
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py.me	2023-07-22 15:12:41.850895179 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/html_generation_controller.py	2023-07-22 15:12:55.844871207 +0200
-@@ -18,7 +18,7 @@ class HTMLGenerationController(object):
- 
-   def GetHTMLForInlineStylesheet(self, contents):
-     if self.current_module is None:
--      if re.search('url\(.+\)', contents):
-+      if re.search(r'url\(.+\)', contents):
-         raise Exception(
-             'Default HTMLGenerationController cannot handle inline style urls')
-       return contents
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py.me	2023-07-22 15:14:06.923717910 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/js_utils.py	2023-07-22 15:18:03.704150614 +0200
-@@ -4,4 +4,4 @@
- 
- 
- def EscapeJSIfNeeded(js):
--  return js.replace('</script>', '<\/script>')
-+  return js.replace(r'</script>', r'<\/script>')
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py.me	2023-07-22 15:14:30.105662532 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py	2023-07-22 15:14:57.977595950 +0200
-@@ -293,6 +293,6 @@ class HTMLModuleParser():
-       html = ''
-     else:
-       if html.find('< /script>') != -1:
--        raise Exception('Escape script tags with <\/script>')
-+        raise Exception(r'Escape script tags with <\/script>')
- 
-     return HTMLModuleParserResults(html)
-diff -up chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py.me chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py
---- chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py.me	2023-07-22 15:13:12.316842990 +0200
-+++ chromium-115.0.5790.102/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet.py	2023-07-22 15:13:49.684759091 +0200
-@@ -60,7 +60,7 @@ class ParsedStyleSheet(object):
-       return 'url(data:image/%s;base64,%s)' % (ext[1:], data.decode('utf-8'))
- 
-     # I'm assuming we only have url()'s associated with images
--    return re.sub('url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-+    return re.sub(r'url\((?P<quote>"|\'|)(?P<url>[^"\'()]*)(?P=quote)\)',
-                   InlineUrl, self.contents)
- 
-   def AppendDirectlyDependentFilenamesTo(self, dependent_filenames):
-@@ -72,7 +72,7 @@ class ParsedStyleSheet(object):
-       raise Exception('@imports are not supported')
- 
-     matches = re.findall(
--        'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-+        r'url\((?:["|\']?)([^"\'()]*)(?:["|\']?)\)',
-         self.contents)
- 
-     def resolve_url(url):
-diff -up chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py.me chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py
---- chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py.me	2023-07-22 15:11:56.826972306 +0200
-+++ chromium-115.0.5790.102/third_party/dawn/generator/generator_lib.py	2023-07-22 15:12:37.550902545 +0200
-@@ -119,8 +119,8 @@ class _PreprocessingLoader(jinja2.BaseLo
-             source = self.preprocess(f.read())
-         return source, path, lambda: mtime == os.path.getmtime(path)
- 
--    blockstart = re.compile('{%-?\s*(if|elif|else|for|block|macro)[^}]*%}')
--    blockend = re.compile('{%-?\s*(end(if|for|block|macro)|elif|else)[^}]*%}')
-+    blockstart = re.compile(r'{%-?\s*(if|elif|else|for|block|macro)[^}]*%}')
-+    blockend = re.compile(r'{%-?\s*(end(if|for|block|macro)|elif|else)[^}]*%}')
- 
-     def preprocess(self, source):
-         lines = source.split('\n')
diff --git a/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch b/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
deleted file mode 100644
index 3b79f512487ae..0000000000000
--- a/srcpkgs/chromium/patches/chromium-118-workaround_clang_bug-structured_binding.patch
+++ /dev/null
@@ -1,96 +0,0 @@
-diff -up chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc
---- chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:37.000000000 +0200
-+++ chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc	2023-06-17 16:53:20.216628557 +0200
-@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui
- void CdmPromiseAdapter::Clear(ClearReason reason) {
-   // Reject all outstanding promises.
-   DCHECK(thread_checker_.CalledOnValidThread());
--  for (auto& [promise_id, promise] : promises_) {
-+  for (auto& [p_i, p_e] : promises_) {
-+    auto& promise_id = p_i;
-+    auto& promise = p_e;
-     TRACE_EVENT_NESTABLE_ASYNC_END1(
-         "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id),
-         "status", "cleared");
-diff -up chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
---- chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:41.000000000 +0200
-+++ chromium-115.0.5790.24/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc	2023-06-17 18:47:06.001403966 +0200
-@@ -655,8 +658,10 @@ NGGridSizingTree NGGridLayoutAlgorithm::
-   NGGridSizingTree sizing_tree;
- 
-   if (const auto* layout_subtree = ConstraintSpace().GridLayoutSubtree()) {
--    auto& [grid_items, layout_data, subtree_size] =
--        sizing_tree.CreateSizingData();
-+    auto& [g_i, l_d, s_s] = sizing_tree.CreateSizingData();
-+    auto& grid_items = g_i;
-+    auto& layout_data = l_d;
-+    auto& subtree_size = s_s;
- 
-     const auto& node = Node();
-     grid_items =
-@@ -1798,8 +1803,10 @@ void NGGridLayoutAlgorithm::CompleteTrac
-     bool* opt_needs_additional_pass) const {
-   DCHECK(sizing_subtree);
- 
--  auto& [grid_items, layout_data, subtree_size] =
--      sizing_subtree.SubtreeRootData();
-+  auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData();
-+  auto& grid_items = g_i;
-+  auto& layout_data = l_d;
-+  auto& subtree_size = s_s;
- 
-   const bool is_for_columns = track_direction == kForColumns;
-   const bool has_non_definite_track =
-@@ -1924,8 +1931,10 @@ template <typename CallbackFunc>
- void NGGridLayoutAlgorithm::ForEachSubgrid(
-     const NGGridSizingSubtree& sizing_subtree,
-     const CallbackFunc& callback_func) const {
--  auto& [grid_items, layout_data, subtree_size] =
--      sizing_subtree.SubtreeRootData();
-+  auto& [g_i, l_d, s_s] = sizing_subtree.SubtreeRootData();
-+  auto& grid_items = g_i;
-+  auto& layout_data = l_d;
-+  auto& subtree_size = s_s;
- 
-   // If we know this subtree doesn't have nested subgrids we can exit early
-   // instead of iterating over every grid item looking for them.
-diff -up chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc
---- chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me	2023-06-19 08:04:02.287072722 +0200
-+++ chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc	2023-06-19 08:18:24.576814950 +0200
-@@ -1393,7 +1393,8 @@ void ServiceWorkerContextWrapper::MaybeP
-     return;
-   }
- 
--  auto [document_url, key, callback] = std::move(*request);
-+  auto [d_u, key, callback] = std::move(*request);
-+  auto document_url = d_u;
- 
-   DCHECK(document_url.is_valid());
-   TRACE_EVENT1("ServiceWorker",
-diff -up chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.me chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc
---- chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc.me	2023-09-15 13:03:00.787257048 +0200
-+++ chromium-117.0.5938.62/third_party/blink/renderer/core/layout/ng/grid/ng_grid_layout_algorithm.cc	2023-09-15 13:15:05.502706522 +0200
-@@ -3437,7 +3437,10 @@ void NGGridLayoutAlgorithm::PlaceGridIte
-   DCHECK(out_row_break_between);
- 
-   const auto& container_space = ConstraintSpace();
--  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
-+  const auto& [g_i, l_d, t_s] = sizing_tree.TreeRootData();
-+  const auto& grid_items = g_i;
-+  const auto& layout_data = l_d;
-+  const auto& tree_size = t_s;
- 
-   const auto* cached_layout_subtree = container_space.GridLayoutSubtree();
-   const auto container_writing_direction =
-@@ -3601,7 +3604,10 @@ void NGGridLayoutAlgorithm::PlaceGridIte
- 
-   // TODO(ikilpatrick): Update |SetHasSeenAllChildren| and early exit if true.
-   const auto& constraint_space = ConstraintSpace();
--  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
-+  const auto& [g_i, l_d, t_s] = sizing_tree.TreeRootData();
-+  const auto& grid_items = g_i;
-+  const auto& layout_data = l_d;
-+  const auto& tree_size =t_s;
- 
-   const auto* cached_layout_subtree = constraint_space.GridLayoutSubtree();
-   const auto container_writing_direction =
diff --git a/srcpkgs/chromium/patches/chromium-119-constexpr.patch b/srcpkgs/chromium/patches/chromium-119-constexpr.patch
deleted file mode 100644
index b195ff408ba81..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-constexpr.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h.me chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h
---- chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h.me	2023-10-31 21:05:05.548565241 +0100
-+++ chromium-119.0.6045.59/components/miracle_parameter/common/public/miracle_parameter.h	2023-10-31 21:20:53.945532094 +0100
-@@ -93,7 +93,7 @@ class MiracleParameter {
- template <>
- class MiracleParameter<std::string> : public MiracleParameterBase<std::string> {
-  public:
--  constexpr MiracleParameter(const base::Feature* feature,
-+  MiracleParameter(const base::Feature* feature,
-                              const char* param_name,
-                              std::string default_value)
-       : MiracleParameterBase(feature, param_name, std::move(default_value)) {}
diff --git a/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch b/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
deleted file mode 100644
index 88d675e8047f0..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-hide-UseChromeOSDirectVideoDecoder-flag-on-VA-API-devices.patch
+++ /dev/null
@@ -1,195 +0,0 @@
-commit 87fca7f1759e800bd72b5ab6511eea17d6400a76
-Author: Pilar Molina Lopez <pmolinalopez@chromium.org>
-Date:   Tue Oct 24 19:57:55 2023 +0000
-
-    video: hide UseChromeOSDirectVideoDecoder flag on VA-API devices
-    
-    We are seeing crashes causes by this CHECK statement:
-    https://source.chromium.org/chromium/chromium/src/+/main:content/public/browser/gpu_utils.cc;l=151;drc=0e777ba9b6c34611705d5b145c92bcd09539011c
-    It's triggered when the user manually disables the UseChromeOSDirectVideoDecoder
-    flag on VA-API devices (Intel and AMD). This flag is supported only on
-    non-Intel and non-AMD devices. This CL adds this information to the flag
-    description and hides the flag in case VA-API is used.
-    
-    Bug: 1469285
-    Test: manual test on volteer
-    Change-Id: I153b9ccb3815498c91ce5eee966834060749e247
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4960919
-    Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
-    Reviewed-by: Andres Calderon Jaramillo <andrescj@chromium.org>
-    Reviewed-by: Avi Drissman <avi@chromium.org>
-    Commit-Queue: Pilar Molina Lopez <pmolinalopez@chromium.org>
-    Cr-Commit-Position: refs/heads/main@{#1214411}
-
-diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
-index ee9fb206cde36..0fe18013ab044 100644
---- a/chrome/browser/DEPS
-+++ b/chrome/browser/DEPS
-@@ -418,6 +418,7 @@ include_rules = [
-   "+media/base",  # For media switches
-   "+media/capabilities", # For InMemoryVideoDecodeStatsDB
-   "+media/cdm",
-+  "+media/gpu/buildflags.h",
-   "+media/remoting/device_capability_checker.h",
-   "+media/capture",
-   "+media/midi",  # For midi switches
-diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
-index 84709afaa34d0..777bebeb33d9e 100644
---- a/chrome/browser/about_flags.cc
-+++ b/chrome/browser/about_flags.cc
-@@ -7578,11 +7578,13 @@ const FeatureEntry kFeatureEntries[] = {
- #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
- 
- #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-+#if !BUILDFLAG(USE_VAAPI)
-     {"chromeos-direct-video-decoder",
-      flag_descriptions::kChromeOSDirectVideoDecoderName,
-      flag_descriptions::kChromeOSDirectVideoDecoderDescription,
-      kOsCrOS | kOsLacros,
-      FEATURE_VALUE_TYPE(media::kUseChromeOSDirectVideoDecoder)},
-+#endif  // !BUILDFLAG(USE_VAAPI)
- 
-     {"enable-vbr-encode-acceleration",
-      flag_descriptions::kChromeOSHWVBREncodingName,
-diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
-index 318a8be9ab1a6..d2497d0c403f3 100644
---- a/chrome/browser/flag_descriptions.cc
-+++ b/chrome/browser/flag_descriptions.cc
-@@ -7,6 +7,7 @@
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "components/supervised_user/core/common/buildflags.h"
-+#include "media/gpu/buildflags.h"
- #include "pdf/buildflags.h"
- 
- // Keep in identical order as the header file, see the comment at the top
-@@ -7338,6 +7339,7 @@ const char kQuickOfficeForceFileDownloadDescription[] =
- #endif  // BUILDFLAG(IS_CHROMEOS)
- 
- #if BUILDFLAG(IS_CHROMEOS) && BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-+#if !BUILDFLAG(USE_VAAPI)
- const char kChromeOSDirectVideoDecoderName[] = "ChromeOS Direct Video Decoder";
- const char kChromeOSDirectVideoDecoderDescription[] =
-     "Enables the hardware-accelerated ChromeOS direct media::VideoDecoder "
-@@ -7345,7 +7347,8 @@ const char kChromeOSDirectVideoDecoderDescription[] =
-     "--platform-disallows-chromeos-direct-video-decoder command line switch "
-     "which is added for platforms where said direct VideoDecoder does not work "
-     "or is not well tested (see the disable_cros_video_decoder USE flag in "
--    "ChromeOS)";
-+    "ChromeOS). This flag is supported only on non-Intel and non-AMD devices.";
-+#endif  // !BUILDFLAG(USE_VAAPI)
- const char kChromeOSHWVBREncodingName[] =
-     "ChromeOS Hardware Variable Bitrate Encoding";
- const char kChromeOSHWVBREncodingDescription[] =
-diff --git a/content/public/browser/gpu_utils.cc b/content/public/browser/gpu_utils.cc
-index dceeca9659a85..3d091359777cc 100644
---- a/content/public/browser/gpu_utils.cc
-+++ b/content/public/browser/gpu_utils.cc
-@@ -133,20 +133,26 @@ const gpu::GpuPreferences GetGpuPreferencesFromCommandLine() {
- #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
-   // The direct VideoDecoder is disallowed on some particular SoC/platforms.
-   const bool should_use_direct_video_decoder =
-+#if BUILDFLAG(USE_VAAPI)
-+      true;
-+#else
-       !command_line->HasSwitch(
-           switches::kPlatformDisallowsChromeOSDirectVideoDecoder) &&
-       base::FeatureList::IsEnabled(media::kUseChromeOSDirectVideoDecoder);
-+#endif  // BUILDFLAG(USE_VAAPI)
-+
-+  gpu_preferences.enable_chromeos_direct_video_decoder =
-+#if BUILDFLAG(USE_VAAPI)
-+      should_use_direct_video_decoder;
-+#else
-+      // For testing purposes, the following flag allows using the "other" video
-+      // decoder implementation.
-+      base::FeatureList::IsEnabled(
-+          media::kUseAlternateVideoDecoderImplementation)
-+          ? !should_use_direct_video_decoder
-+          : should_use_direct_video_decoder;
-+#endif  // BUILDFLAG(USE_VAAPI)
- 
--  // For testing purposes, the following flag allows using the "other" video
--  // decoder implementation.
--  if (base::FeatureList::IsEnabled(
--          media::kUseAlternateVideoDecoderImplementation)) {
--    gpu_preferences.enable_chromeos_direct_video_decoder =
--        !should_use_direct_video_decoder;
--  } else {
--    gpu_preferences.enable_chromeos_direct_video_decoder =
--        should_use_direct_video_decoder;
--  }
- #if BUILDFLAG(USE_VAAPI)
-   CHECK(gpu_preferences.enable_chromeos_direct_video_decoder);
- #endif  // BUILDFLAG(USE_VAAPI)
-diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
-index 1af4de46e2a02..3086b1bec2134 100644
---- a/media/base/media_switches.cc
-+++ b/media/base/media_switches.cc
-@@ -1192,6 +1192,7 @@ BASE_FEATURE(kChromeOSHWVBREncoding,
-              "ChromeOSHWVBREncoding",
-              base::FEATURE_DISABLED_BY_DEFAULT);
- 
-+#if !BUILDFLAG(USE_VAAPI)
- // Enable the hardware-accelerated direct video decoder instead of the one
- // needing the VdaVideoDecoder adapter. This flag is used mainly as a
- // chrome:flag for developers debugging issues as well as to be able to
-@@ -1200,6 +1201,7 @@ BASE_FEATURE(kChromeOSHWVBREncoding,
- BASE_FEATURE(kUseChromeOSDirectVideoDecoder,
-              "UseChromeOSDirectVideoDecoder",
-              base::FEATURE_ENABLED_BY_DEFAULT);
-+#endif  // !BUILDFLAG(USE_VAAPI)
- 
- // Limit the number of concurrent hardware decoder instances on ChromeOS.
- BASE_FEATURE(kLimitConcurrentDecoderInstances,
-@@ -1228,7 +1230,7 @@ BASE_FEATURE(kPreferSoftwareMT21,
-              "PreferSoftwareMT21",
-              base::FEATURE_DISABLED_BY_DEFAULT);
- #endif  // defined(ARCH_CPU_ARM_FAMILY)
--#if BUILDFLAG(IS_CHROMEOS)
-+#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- // ChromeOS has one of two VideoDecoder implementations active based on
- // SoC/board specific configurations that are sent via command line flags. This
- // switch allows using the non default implementation for testing.
-@@ -1236,7 +1238,7 @@ BASE_FEATURE(kPreferSoftwareMT21,
- BASE_FEATURE(kUseAlternateVideoDecoderImplementation,
-              "UseAlternateVideoDecoderImplementation",
-              base::FEATURE_DISABLED_BY_DEFAULT);
--#endif  // BUILDFLAG(IS_CHROMEOS)
-+#endif  // BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- 
- #if BUILDFLAG(IS_WIN)
-diff --git a/media/base/media_switches.h b/media/base/media_switches.h
-index 1d9c2c2d9df73..96d9595be110e 100644
---- a/media/base/media_switches.h
-+++ b/media/base/media_switches.h
-@@ -14,6 +14,7 @@
- #include "build/build_config.h"
- #include "build/chromeos_buildflags.h"
- #include "media/base/media_export.h"
-+#include "media/gpu/buildflags.h"
- #include "media/media_buildflags.h"
- 
- namespace base {
-@@ -381,16 +382,18 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kBuiltInHlsPlayer);
- #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kChromeOSHWAV1Decoder);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kChromeOSHWVBREncoding);
-+#if !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseChromeOSDirectVideoDecoder);
-+#endif  // !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kLimitConcurrentDecoderInstances);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUSeSequencedTaskRunnerForVEA);
- #if defined(ARCH_CPU_ARM_FAMILY)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kPreferGLImageProcessor);
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kPreferSoftwareMT21);
- #endif  // defined(ARCH_CPU_ARM_FAMILY)
--#if BUILDFLAG(IS_CHROMEOS)
-+#if BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- MEDIA_EXPORT BASE_DECLARE_FEATURE(kUseAlternateVideoDecoderImplementation);
--#endif  // BUILDFLAG(IS_CHROMEOS)
-+#endif  // BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(USE_VAAPI)
- #endif  // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
- 
- #if BUILDFLAG(IS_WIN)
diff --git a/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch b/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
deleted file mode 100644
index 5cb969f4f40cf..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-nullptr_t-without-namespace-std.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h.me chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h
---- chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h.me	2023-10-27 20:07:16.421230815 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/core/paint/fragment_data_iterator.h	2023-10-27 20:07:36.883600085 +0200
-@@ -52,7 +52,7 @@ class FragmentDataIterator
-  public:
-   explicit FragmentDataIterator(const LayoutObject& object)
-       : FragmentDataIteratorBase(&object.FirstFragment()) {}
--  explicit FragmentDataIterator(nullptr_t)
-+  explicit FragmentDataIterator(std::nullptr_t)
-       : FragmentDataIteratorBase(nullptr) {}
- };
- 
-@@ -63,7 +63,7 @@ class MutableFragmentDataIterator
-   explicit MutableFragmentDataIterator(const LayoutObject& object)
-       : FragmentDataIteratorBase(
-             &object.GetMutableForPainting().FirstFragment()) {}
--  explicit MutableFragmentDataIterator(nullptr_t)
-+  explicit MutableFragmentDataIterator(std::nullptr_t)
-       : FragmentDataIteratorBase(nullptr) {}
- };
- 
diff --git a/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch b/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
deleted file mode 100644
index 717d897446c7c..0000000000000
--- a/srcpkgs/chromium/patches/chromium-119-nvidia-use-separate-bo-to-verify-modifier.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-commit bdcc23e0a5e7e220660d3f54c97262f9a4c31606
-Author: Nick Diego Yamane <nickdiego@igalia.com>
-Date:   Thu Nov 2 17:26:25 2023 +0000
-
-    gbm: nvidia: use separate bo to verify modifiers
-    
-    Buggy Nvidia drivers fail to return FDs for planes of a BO which had
-    already an imported BO destroyed before. This is a workaround for that
-    issue, which consists of creating/destroying a separate 1x1 BO for
-    validating the modifiers before actually creating the final requested
-    BO, which for now is limited to IS_LINUX builds.
-    
-    The Nvidia driver bug is being tracked under internal bug 4315529. There
-    seems to be other issues when running under Wayland with Nvidia, which
-    will be tracked and addressed in separate patches.
-    
-    R=dcastagna, msisov@igalia.com
-    
-      with ozone/wayland backend and verify GPU acceleration is not broken.
-    
-    Test: In a single Nvidia GPU setup, with proprietary driver, run Chrome
-    Bug: 1273758, 1478684, 1463851
-    Change-Id: I9f322bcf40b460bcd4ead02f05dd2e9a8d271cea
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4989782
-    Reviewed-by: Maksim Sisov <msisov@igalia.com>
-    Commit-Queue: Nick Yamane <nickdiego@igalia.com>
-    Cr-Commit-Position: refs/heads/main@{#1218924}
-
-diff --git a/ui/gfx/linux/gbm_wrapper.cc b/ui/gfx/linux/gbm_wrapper.cc
-index bf90b76605f68..14918c19c0ab0 100644
---- a/ui/gfx/linux/gbm_wrapper.cc
-+++ b/ui/gfx/linux/gbm_wrapper.cc
-@@ -11,6 +11,7 @@
- #include "base/logging.h"
- #include "base/memory/raw_ptr.h"
- #include "base/memory/raw_ptr_exclusion.h"
-+#include "base/numerics/safe_conversions.h"
- #include "base/posix/eintr_wrapper.h"
- #include "skia/ext/legacy_display_globals.h"
- #include "third_party/skia/include/core/SkSurface.h"
-@@ -71,6 +72,7 @@ base::ScopedFD GetPlaneFdForBo(gbm_bo* bo, size_t plane) {
-   int ret;
-   // Use DRM_RDWR to allow the fd to be mappable in another process.
-   ret = drmPrimeHandleToFD(dev_fd, plane_handle, DRM_CLOEXEC | DRM_RDWR, &fd);
-+  PLOG_IF(ERROR, ret != 0) << "Failed to get fd for plane.";
- 
-   // Older DRM implementations blocked DRM_RDWR, but gave a read/write mapping
-   // anyways
-@@ -301,58 +303,82 @@ class Device final : public ui::GbmDevice {
- 
-   std::unique_ptr<ui::GbmBuffer> CreateBufferWithModifiers(
-       uint32_t format,
--      const gfx::Size& size,
-+      const gfx::Size& requested_size,
-       uint32_t flags,
-       const std::vector<uint64_t>& modifiers) override {
--    if (modifiers.empty())
--      return CreateBuffer(format, size, flags);
--
--    std::vector<uint64_t> filtered_modifiers =
--        GetFilteredModifiers(format, flags, modifiers);
--    struct gbm_bo* bo = nullptr;
--    while (filtered_modifiers.size() > 0) {
--      bo = gbm_bo_create_with_modifiers(device_, size.width(), size.height(),
--                                        format, filtered_modifiers.data(),
--                                        filtered_modifiers.size());
--      if (!bo) {
-+    if (modifiers.empty()) {
-+      return CreateBuffer(format, requested_size, flags);
-+    }
-+
-+    // Buggy drivers prevent us from getting plane FDs from a BO which had its
-+    // previously imported BO destroyed. E.g: Nvidia. Thus, on Linux Desktop, we
-+    // do the create/import modifiers validation loop below using a separate set
-+    // of 1x1 BOs which are destroyed before creating the final BO creation used
-+    // to instantiate the returned GbmBuffer.
-+    gfx::Size size =
-+#if BUILDFLAG(IS_LINUX)
-+        gfx::Size(1, 1);
-+#else
-+        requested_size;
-+#endif
-+    auto filtered_modifiers = GetFilteredModifiers(format, flags, modifiers);
-+    struct gbm_bo* created_bo = nullptr;
-+    bool valid_modifiers = false;
-+
-+    while (!valid_modifiers && !filtered_modifiers.empty()) {
-+      created_bo = gbm_bo_create_with_modifiers(
-+          device_, size.width(), size.height(), format,
-+          filtered_modifiers.data(), filtered_modifiers.size());
-+      if (!created_bo) {
-         return nullptr;
-       }
- 
--      struct gbm_import_fd_modifier_data fd_data;
--      fd_data.width = size.width();
--      fd_data.height = size.height();
--      fd_data.format = format;
--      fd_data.num_fds = gbm_bo_get_plane_count(bo);
--      fd_data.modifier = gbm_bo_get_modifier(bo);
--
--      // Store fds in the vector of base::ScopedFDs. Will be released
--      // automatically.
-+      const int planes_count = gbm_bo_get_plane_count(created_bo);
-+      struct gbm_import_fd_modifier_data fd_data = {
-+          .width = base::checked_cast<uint32_t>(size.width()),
-+          .height = base::checked_cast<uint32_t>(size.height()),
-+          .format = format,
-+          .num_fds = base::checked_cast<uint32_t>(planes_count),
-+          .modifier = gbm_bo_get_modifier(created_bo)};
-+      // Store fds in a base::ScopedFDs vector. Will be released automatically.
-       std::vector<base::ScopedFD> fds;
-       for (size_t i = 0; i < static_cast<size_t>(fd_data.num_fds); ++i) {
--        fds.emplace_back(GetPlaneFdForBo(bo, i));
-+        fds.emplace_back(GetPlaneFdForBo(created_bo, i));
-         fd_data.fds[i] = fds.back().get();
--        fd_data.strides[i] = gbm_bo_get_stride_for_plane(bo, i);
--        fd_data.offsets[i] = gbm_bo_get_offset(bo, i);
-+        fd_data.strides[i] = gbm_bo_get_stride_for_plane(created_bo, i);
-+        fd_data.offsets[i] = gbm_bo_get_offset(created_bo, i);
-       }
- 
--      struct gbm_bo* bo_import =
-+      struct gbm_bo* imported_bo =
-           gbm_bo_import(device_, GBM_BO_IMPORT_FD_MODIFIER, &fd_data, flags);
--      if (bo_import) {
--        gbm_bo_destroy(bo_import);
--        break;
-+
-+      if (imported_bo) {
-+        valid_modifiers = true;
-+        gbm_bo_destroy(imported_bo);
-       } else {
--        gbm_bo_destroy(bo);
--        bo = nullptr;
-         AddModifierToBlocklist(format, flags, fd_data.modifier);
-         filtered_modifiers =
-             GetFilteredModifiers(format, flags, filtered_modifiers);
-       }
-+
-+      if (!valid_modifiers || size != requested_size) {
-+        gbm_bo_destroy(created_bo);
-+        created_bo = nullptr;
-+      }
-     }
--    if (!bo) {
--      return nullptr;
-+
-+    // If modifiers were successfully verified though `created_bo` is null here,
-+    // it it means that the buffer created for verification could not be reused,
-+    // ie: different size, so create it now with the `requested_size`.
-+    if (valid_modifiers && !created_bo) {
-+      created_bo = gbm_bo_create_with_modifiers(
-+          device_, requested_size.width(), requested_size.height(), format,
-+          filtered_modifiers.data(), filtered_modifiers.size());
-+      PLOG_IF(ERROR, !created_bo) << "Failed to create BO with modifiers.";
-     }
- 
--    return CreateBufferForBO(bo, format, size, flags);
-+    return created_bo ? CreateBufferForBO(created_bo, format, size, flags)
-+                      : nullptr;
-   }
- 
-   std::unique_ptr<ui::GbmBuffer> CreateBufferFromHandle(
diff --git a/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch b/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
new file mode 100644
index 0000000000000..bb461ef3664a2
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-arm64-memory_tagging.patch
@@ -0,0 +1,14 @@
+--- chromium-120.0.6099.35/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h.than	2023-11-26 13:50:07.005519877 +0100
++++ chromium-120.0.6099.35/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_config.h	2023-11-26 13:50:49.727267240 +0100
+@@ -152,10 +152,7 @@
+   (!BUILDFLAG(PUT_REF_COUNT_IN_PREVIOUS_SLOT) && \
+    defined(ARCH_CPU_LITTLE_ENDIAN))
+ 
+-#define PA_CONFIG_HAS_MEMORY_TAGGING()              \
+-  (defined(ARCH_CPU_ARM64) && defined(__clang__) && \
+-   !defined(ADDRESS_SANITIZER) &&                   \
+-   (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
++#define PA_CONFIG_HAS_MEMORY_TAGGING() 0
+ 
+ #if PA_CONFIG(HAS_MEMORY_TAGGING)
+ static_assert(sizeof(void*) == 8);
diff --git a/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch b/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
new file mode 100644
index 0000000000000..98216ddb465ca
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-disable-FFmpegAllowLists.patch
@@ -0,0 +1,12 @@
+diff -up chromium-120.0.6099.56/media/base/media_switches.cc.me chromium-120.0.6099.56/media/base/media_switches.cc
+--- chromium-120.0.6099.56/media/base/media_switches.cc.me	2023-12-02 11:43:21.990775897 +0100
++++ chromium-120.0.6099.56/media/base/media_switches.cc	2023-12-02 11:45:23.248006377 +0100
+@@ -1636,7 +1636,7 @@ BASE_FEATURE(kUseSharedImagesForPepperVi
+ // Enables FFmpeg allow lists for supported codecs / containers.
+ BASE_FEATURE(kFFmpegAllowLists,
+              "FFmpegAllowLists",
+-             base::FEATURE_ENABLED_BY_DEFAULT);
++             base::FEATURE_DISABLED_BY_DEFAULT);
+ 
+ #if BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS)
+ // Allows decoding of theora / vp3 content.
diff --git a/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch b/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
new file mode 100644
index 0000000000000..6a2585b953c3b
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-disable-GlobalMediaControlsCastStartStop.patch
@@ -0,0 +1,14 @@
+--- chromium-120.0.6099.35/chrome/browser/media/router/media_router_feature.cc.orig	2023-11-26 13:25:34.724228755 +0100
++++ chromium-120.0.6099.35/chrome/browser/media/router/media_router_feature.cc	2023-11-26 13:28:26.452359146 +0100
+@@ -71,11 +71,7 @@
+ // TODO(b/202294946): Remove when enabled by default on ChromeOS.
+ BASE_FEATURE(kGlobalMediaControlsCastStartStop,
+              "GlobalMediaControlsCastStartStop",
+-#if BUILDFLAG(IS_CHROMEOS)
+              base::FEATURE_DISABLED_BY_DEFAULT);
+-#else
+-             base::FEATURE_ENABLED_BY_DEFAULT);
+-#endif  // BUILDFLAG(IS_CHROMEOS)
+ #endif  // !BUILDFLAG(IS_ANDROID)
+ 
+ namespace {
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
new file mode 100644
index 0000000000000..96258e67aaebb
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch
@@ -0,0 +1,230 @@
+commit 57526b8dc45b2e6c67bba7306f1dde73b1f2910c
+Author: sisidovski <sisidovski@chromium.org>
+Date:   Tue Oct 24 09:32:49 2023 +0000
+
+    Remove unused items from the RaceNetworkRequest hashmap
+    
+    When the AutoPreload or the race-network-and-fetch-handler option in the
+    static routing API is enabled, network requests are dispatched and
+    URLLoaderFactories are held in a hashmap in ServiceWorkerGlobalScope.
+    Those are consumed inside the fetch handler when fetch(e.request) is
+    called. But if the fetch handler doesn't call fetch() e.g. fallback,
+    those hashmap items does not have a chance to be removed.
+    
+    This CL changes the hashmap items to be removed when the fetch event
+    finishes, and the URLLoaderFactory is still not consumed at that time.
+    This may loose the dedupe capability if fetch() is called later e.g.
+    setTimeout(() => fetch()), but it makes sense to prioritize keeping the
+    hashmap small.
+    
+    Change-Id: I51bdc9d5eb5185f2b5b4df6ee785715b1180c848
+    Bug: 1492640
+    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4964840
+    Reviewed-by: Minoru Chikamune <chikamune@chromium.org>
+    Commit-Queue: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+    Reviewed-by: Yoshisato Yanagisawa <yyanagisawa@chromium.org>
+    Cr-Commit-Position: refs/heads/main@{#1214064}
+
+diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+index 02887edc10883..b3624fc0162df 100644
+--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
++++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+@@ -46,6 +46,7 @@
+ #include "services/network/public/cpp/cross_origin_embedder_policy.h"
+ #include "services/network/public/mojom/cookie_manager.mojom-blink.h"
+ #include "services/network/public/mojom/cross_origin_embedder_policy.mojom.h"
++#include "services/network/public/mojom/url_loader_factory.mojom-blink.h"
+ #include "third_party/blink/public/common/features.h"
+ #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
+ #include "third_party/blink/public/mojom/notifications/notification.mojom-blink.h"
+@@ -1096,6 +1097,10 @@ void ServiceWorkerGlobalScope::DidHandleFetchEvent(
+       TRACE_ID_WITH_SCOPE(kServiceWorkerGlobalScopeTraceScope,
+                           TRACE_ID_LOCAL(event_id)),
+       TRACE_EVENT_FLAG_FLOW_IN, "status", MojoEnumToString(status));
++
++  // Delete the URLLoaderFactory for the RaceNetworkRequest if it's not used.
++  RemoveItemFromRaceNetworkRequests(event_id);
++
+   if (!RunEventCallback(&fetch_event_callbacks_, event_queue_.get(), event_id,
+                         status)) {
+     // The event may have been aborted. Its response callback also needs to be
+@@ -1495,6 +1500,7 @@ void ServiceWorkerGlobalScope::AbortCallbackForFetchEvent(
+     response_callback_iter->value->TakeValue().reset();
+     fetch_response_callbacks_.erase(response_callback_iter);
+   }
++  RemoveItemFromRaceNetworkRequests(event_id);
+ 
+   // Run the event callback with the error code.
+   auto event_callback_iter = fetch_event_callbacks_.find(event_id);
+@@ -1551,52 +1557,11 @@ void ServiceWorkerGlobalScope::StartFetchEvent(
+ 
+   if (params->race_network_request_loader_factory &&
+       params->request->service_worker_race_network_request_token) {
+-    auto insert_result = race_network_request_loader_factories_.insert(
+-        String(params->request->service_worker_race_network_request_token
+-                   ->ToString()),
+-        std::move(params->race_network_request_loader_factory));
+-
+-    // DumpWithoutCrashing if the token is empty, or not inserted as a new entry
+-    // to |race_network_request_loader_factories_|.
+-    // TODO(crbug.com/1492640) Remove DumpWithoutCrashing once we collect data
+-    // and identify the cause.
+-    static bool has_dumped_without_crashing_for_empty_token = false;
+-    static bool has_dumped_without_crashing_for_not_new_entry = false;
+-    if (!has_dumped_without_crashing_for_empty_token &&
+-        params->request->service_worker_race_network_request_token
+-            ->is_empty()) {
+-      has_dumped_without_crashing_for_empty_token = true;
+-      SCOPED_CRASH_KEY_BOOL(
+-          "SWGlobalScope", "empty_race_token",
+-          params->request->service_worker_race_network_request_token
+-              ->is_empty());
+-      SCOPED_CRASH_KEY_STRING64(
+-          "SWGlobalScope", "race_token_string",
+-          params->request->service_worker_race_network_request_token
+-              ->ToString());
+-      SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
+-                            insert_result.is_new_entry);
+-      SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
+-                                 params->request->url.GetString().Utf8());
+-      base::debug::DumpWithoutCrashing();
+-    }
+-    if (!has_dumped_without_crashing_for_not_new_entry &&
+-        !insert_result.is_new_entry) {
+-      has_dumped_without_crashing_for_not_new_entry = true;
+-      SCOPED_CRASH_KEY_BOOL(
+-          "SWGlobalScope", "empty_race_token",
+-          params->request->service_worker_race_network_request_token
+-              ->is_empty());
+-      SCOPED_CRASH_KEY_STRING64(
+-          "SWGlobalScope", "race_token_string",
+-          params->request->service_worker_race_network_request_token
+-              ->ToString());
+-      SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
+-                            insert_result.is_new_entry);
+-      SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
+-                                 params->request->url.GetString().Utf8());
+-      base::debug::DumpWithoutCrashing();
+-    }
++    InsertNewItemToRaceNetworkRequests(
++        event_id,
++        params->request->service_worker_race_network_request_token.value(),
++        std::move(params->race_network_request_loader_factory),
++        params->request->url);
+   }
+ 
+   Request* request = Request::Create(
+@@ -2808,12 +2773,71 @@ bool ServiceWorkerGlobalScope::SetAttributeEventListener(
+ absl::optional<mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>
+ ServiceWorkerGlobalScope::FindRaceNetworkRequestURLLoaderFactory(
+     const base::UnguessableToken& token) {
+-  mojo::PendingRemote<network::mojom::blink::URLLoaderFactory> result =
+-      race_network_request_loader_factories_.Take(String(token.ToString()));
++  std::unique_ptr<RaceNetworkRequestInfo> result =
++      race_network_requests_.Take(String(token.ToString()));
+   if (result) {
+-    return result;
++    race_network_request_fetch_event_ids_.erase(result->fetch_event_id);
++    return absl::optional<
++        mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>(
++        std::move(result->url_loader_factory));
+   }
+   return absl::nullopt;
+ }
+ 
++void ServiceWorkerGlobalScope::InsertNewItemToRaceNetworkRequests(
++    int fetch_event_id,
++    const base::UnguessableToken& token,
++    mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++        url_loader_factory,
++    const KURL& request_url) {
++  auto race_network_request_token = String(token.ToString());
++  auto info = std::make_unique<RaceNetworkRequestInfo>(
++      fetch_event_id, race_network_request_token,
++      std::move(url_loader_factory));
++  race_network_request_fetch_event_ids_.insert(fetch_event_id, info.get());
++  auto insert_result = race_network_requests_.insert(race_network_request_token,
++                                                     std::move(info));
++
++  // DumpWithoutCrashing if the token is empty, or not inserted as a new entry
++  // to |race_network_request_loader_factories_|.
++  // TODO(crbug.com/1492640) Remove DumpWithoutCrashing once we collect data
++  // and identify the cause.
++  static bool has_dumped_without_crashing_for_empty_token = false;
++  static bool has_dumped_without_crashing_for_not_new_entry = false;
++  if (!has_dumped_without_crashing_for_empty_token && token.is_empty()) {
++    has_dumped_without_crashing_for_empty_token = true;
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "empty_race_token",
++                          token.is_empty());
++    SCOPED_CRASH_KEY_STRING64("SWGlobalScope", "race_token_string",
++                              token.ToString());
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
++                          insert_result.is_new_entry);
++    SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
++                               request_url.GetString().Utf8());
++    base::debug::DumpWithoutCrashing();
++  }
++  if (!has_dumped_without_crashing_for_not_new_entry &&
++      !insert_result.is_new_entry) {
++    has_dumped_without_crashing_for_not_new_entry = true;
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "empty_race_token",
++                          token.is_empty());
++    SCOPED_CRASH_KEY_STRING64("SWGlobalScope", "race_token_string",
++                              token.ToString());
++    SCOPED_CRASH_KEY_BOOL("SWGlobalScope", "race_insert_new_entry",
++                          insert_result.is_new_entry);
++    SCOPED_CRASH_KEY_STRING256("SWGlobalScope", "race_request_url",
++                               request_url.GetString().Utf8());
++    base::debug::DumpWithoutCrashing();
++  }
++}
++
++void ServiceWorkerGlobalScope::RemoveItemFromRaceNetworkRequests(
++    int fetch_event_id) {
++  RaceNetworkRequestInfo* info =
++      race_network_request_fetch_event_ids_.Take(fetch_event_id);
++  if (info) {
++    race_network_requests_.erase(info->token);
++  }
++}
++
+ }  // namespace blink
+diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+index 46c431b395825..ac4cac0b1d8fb 100644
+--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
++++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.h
+@@ -623,6 +623,14 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final
+   // ServiceWorker.FetchEvent.QueuingTime histogram.
+   void RecordQueuingTime(base::TimeTicks created_time);
+ 
++  void InsertNewItemToRaceNetworkRequests(
++      int fetch_event_id,
++      const base::UnguessableToken& token,
++      mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++          url_loader_factory,
++      const KURL& request_url);
++  void RemoveItemFromRaceNetworkRequests(int fetch_event_id);
++
+   Member<ServiceWorkerClients> clients_;
+   Member<ServiceWorkerRegistration> registration_;
+   Member<::blink::ServiceWorker> service_worker_;
+@@ -768,10 +776,17 @@ class MODULES_EXPORT ServiceWorkerGlobalScope final
+ 
+   blink::BlinkStorageKey storage_key_;
+ 
++  struct RaceNetworkRequestInfo {
++    int fetch_event_id;
++    String token;
++    mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
++        url_loader_factory;
++  };
+   // TODO(crbug.com/918702) WTF::HashMap cannot use base::UnguessableToken as a
+   // key. As a workaround uses WTF::String as a key instead.
+-  HashMap<String, mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>>
+-      race_network_request_loader_factories_;
++  HashMap<String, std::unique_ptr<RaceNetworkRequestInfo>>
++      race_network_requests_;
++  HashMap<int, RaceNetworkRequestInfo*> race_network_request_fetch_event_ids_;
+ 
+   HeapMojoAssociatedRemote<mojom::blink::AssociatedInterfaceProvider>
+       remote_associated_interfaces_{this};
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
new file mode 100644
index 0000000000000..8bbbbe9483632
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-build-failure.patch.args
@@ -0,0 +1 @@
+-RNp1
diff --git a/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch b/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
new file mode 100644
index 0000000000000..112da65b4d9b6
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-el7-clang-version-warning.patch
@@ -0,0 +1,16 @@
+diff -up chromium-120.0.6099.56/third_party/libc++/src/include/__config.me chromium-120.0.6099.56/third_party/libc++/src/include/__config
+--- chromium-120.0.6099.56/third_party/libc++/src/include/__config.me	2023-12-03 00:05:51.254483474 +0100
++++ chromium-120.0.6099.56/third_party/libc++/src/include/__config	2023-12-03 00:06:05.872863168 +0100
+@@ -32,11 +32,7 @@
+ 
+ // Warn if a compiler version is used that is not supported anymore
+ // LLVM RELEASE Update the minimum compiler versions
+-#  if defined(_LIBCPP_CLANG_VER)
+-#    if _LIBCPP_CLANG_VER < 1500
+-#      warning "Libc++ only supports Clang 15 and later"
+-#    endif
+-#  elif defined(_LIBCPP_APPLE_CLANG_VER)
++#  if defined(_LIBCPP_APPLE_CLANG_VER)
+ #    if _LIBCPP_APPLE_CLANG_VER < 1500
+ #      warning "Libc++ only supports AppleClang 15 and later"
+ #    endif
diff --git a/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch b/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
new file mode 100644
index 0000000000000..72c7b7ec41c28
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-gn-workaround-atspi.patch
@@ -0,0 +1,13 @@
+diff -up chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn.me chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn
+--- chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn.me	2023-11-26 16:14:15.364064126 +0100
++++ chromium-120.0.6099.35/build/config/linux/atspi2/BUILD.gn	2023-11-26 16:41:16.877321990 +0100
+@@ -21,6 +21,9 @@ if (use_atk) {
+     minor = atspi_version[1]
+     micro = atspi_version[2]
+ 
++    # gn workaround for the error: Assignment had no effect
++    print("ATSPI Version: $major.$minor.$micro")
++
+     # ATSPI 2.49.90 now defines these for us and it's an error for us to
+     # redefine them on the compiler command line.
+     # See ATSPI 927344a34cd5bf81fc64da4968241735ecb4f03b
diff --git a/srcpkgs/chromium/patches/chromium-119-missing-header-files.patch b/srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
similarity index 97%
rename from srcpkgs/chromium/patches/chromium-119-missing-header-files.patch
rename to srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
index a2542ef420eaf..44f867475b218 100644
--- a/srcpkgs/chromium/patches/chromium-119-missing-header-files.patch
+++ b/srcpkgs/chromium/patches/chromium-120-missing-header-files.patch
@@ -131,17 +131,6 @@ diff -up chromium-109.0.5414.74/third_party/swiftshader/src/System/LRUCache.hpp.
  #include <cstddef>
  #include <functional>
  #include <unordered_set>
-diff -up chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h
---- chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h.me	2023-01-17 15:40:23.854386206 +0100
-+++ chromium-109.0.5414.74/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h	2023-01-17 16:58:19.397862885 +0100
-@@ -2388,6 +2388,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeV
- #ifdef VMA_IMPLEMENTATION
- #undef VMA_IMPLEMENTATION
- 
-+#include <cstdio>
- #include <cstdint>
- #include <cstdlib>
- #include <cstring>
 diff -up chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h
 --- chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h.me	2023-01-17 18:08:25.745491353 +0100
 +++ chromium-109.0.5414.74/ui/gfx/geometry/linear_gradient.h	2023-01-17 18:08:35.777667632 +0100
diff --git a/srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch b/srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
similarity index 67%
rename from srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch
rename to srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
index a16c979c37f1c..b1d987adeff8d 100644
--- a/srcpkgs/chromium/patches/chromium-119-no_matching_constructor.patch
+++ b/srcpkgs/chromium/patches/chromium-120-no_matching_constructor.patch
@@ -1,6 +1,25 @@
-diff -up chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constructor chromium-119.0.6045.59/base/trace_event/trace_log.cc
---- chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constructor	2023-10-26 18:16:51.000000000 +0200
-+++ chromium-119.0.6045.59/base/trace_event/trace_log.cc	2023-10-30 16:51:02.270151487 +0100
+diff -up chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc.no_matching_constructor chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc
+--- chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc.no_matching_constructor	2023-11-29 22:39:40.000000000 +0100
++++ chromium-120.0.6099.56/base/metrics/persistent_histogram_allocator.cc	2023-12-03 17:31:25.748420189 +0100
+@@ -218,13 +218,13 @@ PersistentSparseHistogramDataManager::Lo
+     // The sample-record could be for any sparse histogram. Add the reference
+     // to the appropriate collection for later use.
+     if (found_id == match_id) {
+-      found_records.emplace_back(ref, value);
++      found_records.emplace_back() = {ref, value};
+       found = true;
+     } else {
+       std::vector<ReferenceAndSample>* samples =
+           GetSampleMapRecordsWhileLocked(found_id);
+       CHECK(samples);
+-      samples->emplace_back(ref, value);
++      samples->emplace_back() = {ref, value};
+     }
+   }
+ 
+diff -up chromium-120.0.6099.56/base/trace_event/trace_log.cc.no_matching_constructor chromium-120.0.6099.56/base/trace_event/trace_log.cc
+--- chromium-120.0.6099.56/base/trace_event/trace_log.cc.no_matching_constructor	2023-11-29 22:39:40.000000000 +0100
++++ chromium-120.0.6099.56/base/trace_event/trace_log.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -2191,8 +2191,8 @@ void TraceLog::SetTraceBufferForTesting(
  #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
  void TraceLog::OnSetup(const perfetto::DataSourceBase::SetupArgs& args) {
@@ -12,9 +31,9 @@ diff -up chromium-119.0.6045.59/base/trace_event/trace_log.cc.no_matching_constr
  }
  
  void TraceLog::OnStart(const perfetto::DataSourceBase::StartArgs&) {
-diff -up chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc
---- chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor	2023-10-26 18:16:57.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permission_provider.cc	2023-10-30 16:51:02.269151462 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc
+--- chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc.no_matching_constructor	2023-11-29 22:39:47.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/content_settings/one_time_permission_provider.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -226,8 +226,8 @@ void OneTimePermissionProvider::OnSuspen
  
        while (rule_iterator && rule_iterator->HasNext()) {
@@ -37,9 +56,9 @@ diff -up chromium-119.0.6045.59/chrome/browser/content_settings/one_time_permiss
        permissions::PermissionUmaUtil::RecordOneTimePermissionEvent(
            content_setting_type, trigger_event);
      }
-diff -up chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc
---- chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor	2023-10-26 18:16:57.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc	2023-10-30 16:51:02.267151412 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc
+--- chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc.no_matching_constructor	2023-11-29 22:39:48.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/enterprise/profile_management/profile_management_navigation_throttle.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -67,8 +67,8 @@ base::flat_map<std::string, SAMLProfileA
    // TODO(crbug.com/1445072): Add actual domains with attribute names.
    profile_attributes->insert(std::make_pair(
@@ -51,9 +70,9 @@ diff -up chromium-119.0.6045.59/chrome/browser/enterprise/profile_management/pro
  
    // Extract domains and attributes from the command line switch.
    const base::CommandLine& command_line =
-diff -up chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
---- chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor	2023-10-26 18:17:00.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.cc	2023-10-30 16:51:02.262151288 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc.no_matching_constructor	2023-11-29 22:39:52.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/omnibox/chrome_omnibox_client.cc	2023-12-03 17:31:25.749420208 +0100
 @@ -474,10 +474,10 @@ void ChromeOmniboxClient::OnAutocomplete
                alternative_nav_match);
  
@@ -67,9 +86,117 @@ diff -up chromium-119.0.6045.59/chrome/browser/ui/omnibox/chrome_omnibox_client.
  
    if (browser_) {
      auto navigation = chrome::OpenCurrentURL(browser_);
-diff -up chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matching_constructor chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc
---- chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matching_constructor	2023-10-26 18:17:01.000000000 +0200
-+++ chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc	2023-10-30 16:51:02.268151437 +0100
+diff -up chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc.no_matching_constructor	2023-11-29 22:39:52.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/safety_hub/menu_notification_service.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -148,8 +148,8 @@ SafetyHubMenuNotificationService::GetNot
+   // The information related to showing the notification needs to be persisted
+   // as well.
+   SaveNotificationsToPrefs();
+-  return MenuNotificationEntry(notification_to_show->GetNotificationCommandId(),
+-                               notification_to_show->GetNotificationString());
++  return MenuNotificationEntry{notification_to_show->GetNotificationCommandId(),
++                               notification_to_show->GetNotificationString()};
+ }
+ 
+ absl::optional<ResultMap>
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc	2023-12-03 17:31:25.749420208 +0100
+@@ -55,12 +55,12 @@ std::vector<EmbeddedPermissionPromptAskV
+ EmbeddedPermissionPromptAskView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
++        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+   }
+-  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
+-                       ButtonType::kAllow, ui::ButtonStyle::kTonal);
++  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
++                       ButtonType::kAllow, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h	2023-12-03 17:31:25.750420227 +0100
+@@ -86,6 +86,7 @@ class EmbeddedPermissionPromptBaseView :
+   struct RequestLineConfiguration {
+     const raw_ptr<const gfx::VectorIcon> icon;
+     std::u16string message;
++    RequestLineConfiguration(auto i, auto m) : icon(i), message(m) { }
+   };
+ 
+   struct ButtonConfiguration {
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -48,8 +48,8 @@ EmbeddedPermissionPromptPolicyView::GetR
+ std::vector<EmbeddedPermissionPromptPolicyView::ButtonConfiguration>
+ EmbeddedPermissionPromptPolicyView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
+-                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal);
++  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
++                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_denied_view.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -63,18 +63,18 @@ EmbeddedPermissionPromptPreviouslyDenied
+ std::vector<EmbeddedPermissionPromptPreviouslyDeniedView::ButtonConfiguration>
+ EmbeddedPermissionPromptPreviouslyDeniedView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_NOT_ALLOWING),
+-      ButtonType::kContinueNotAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kContinueNotAllowing, ui::ButtonStyle::kTonal};
+ 
+   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
++        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+   } else {
+-    buttons.emplace_back(
++    buttons.emplace_back() = {
+         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
+-        ButtonType::kAllow, ui::ButtonStyle::kTonal);
++        ButtonType::kAllow, ui::ButtonStyle::kTonal};
+   }
+   return buttons;
+ }
+diff -up chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.no_matching_constructor chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc
+--- chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.no_matching_constructor	2023-11-29 22:39:53.000000000 +0100
++++ chromium-120.0.6099.56/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -57,13 +57,13 @@ EmbeddedPermissionPromptPreviouslyGrante
+ std::vector<EmbeddedPermissionPromptPreviouslyGrantedView::ButtonConfiguration>
+ EmbeddedPermissionPromptPreviouslyGrantedView::GetButtonsConfiguration() const {
+   std::vector<ButtonConfiguration> buttons;
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_ALLOWING),
+-      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal};
+ 
+-  buttons.emplace_back(
++  buttons.emplace_back() = {
+       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_STOP_ALLOWING),
+-      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal);
++      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal};
+   return buttons;
+ }
+ 
+diff -up chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc.no_matching_constructor chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc
+--- chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc.no_matching_constructor	2023-11-29 22:39:54.000000000 +0100
++++ chromium-120.0.6099.56/chrome/test/chromedriver/capabilities.cc	2023-12-03 17:31:25.750420227 +0100
 @@ -346,7 +346,7 @@ Status ParseMobileEmulation(const base::
                          "'version' field of type string");
          }
@@ -88,10 +215,10 @@ diff -up chromium-119.0.6045.59/chrome/test/chromedriver/capabilities.cc.no_matc
        }
  
        client_hints.full_version_list = std::move(full_version_list);
-diff -up chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc
---- chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor	2023-10-30 16:51:02.273151562 +0100
-+++ chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sync_util.cc	2023-10-30 17:41:12.685887538 +0100
-@@ -195,9 +195,9 @@ class ContactInfoProfileSetter {
+diff -up chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc
+--- chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc.no_matching_constructor	2023-11-29 22:39:57.000000000 +0100
++++ chromium-120.0.6099.56/components/autofill/core/browser/contact_info_sync_util.cc	2023-12-03 17:31:25.750420227 +0100
+@@ -197,9 +197,9 @@ class ContactInfoProfileSetter {
        CHECK(observations.empty());
        for (const sync_pb::ContactInfoSpecifics::Observation& proto_observation :
             metadata.observations()) {
@@ -103,10 +230,38 @@ diff -up chromium-119.0.6045.59/components/autofill/core/browser/contact_info_sy
        }
      }
    }
-diff -up chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
---- chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc	2023-10-30 16:51:02.260151238 +0100
-@@ -1530,7 +1530,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOut
+diff -up chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc.no_matching_constructor chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc
+--- chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc.no_matching_constructor	2023-11-29 22:39:57.000000000 +0100
++++ chromium-120.0.6099.56/components/autofill/core/browser/webdata/autofill_table.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -1763,10 +1763,10 @@ std::unique_ptr<AutofillProfile> Autofil
+     }
+ 
+     base::span<const uint8_t> observations_data = s.ColumnBlob(3);
+-    field_type_values.emplace_back(
++    field_type_values.emplace_back() = {
+         type, s.ColumnString16(1), s.ColumnInt(2),
+         std::vector<uint8_t>(observations_data.begin(),
+-                             observations_data.end()));
++                             observations_data.end())};
+ 
+     if (type == ADDRESS_HOME_COUNTRY) {
+       country_code = base::UTF16ToUTF8(s.ColumnString16(1));
+diff -up chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc.no_matching_constructor chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc
+--- chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc.no_matching_constructor	2023-11-29 22:39:58.000000000 +0100
++++ chromium-120.0.6099.56/components/password_manager/core/browser/password_manager.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -630,7 +630,7 @@ void PasswordManager::OnUserModifiedNonP
+   // |driver| might be empty on iOS or in tests.
+   int driver_id = driver ? driver->GetId() : 0;
+   possible_usernames_.Put(
+-      PossibleUsernameFieldIdentifier(driver_id, renderer_id),
++      PossibleUsernameFieldIdentifier{driver_id, renderer_id},
+       PossibleUsernameData(GetSignonRealm(driver->GetLastCommittedURL()),
+                            renderer_id, value, base::Time::Now(), driver_id,
+                            autocomplete_attribute_has_username, is_likely_otp));
+diff -up chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
+--- chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc	2023-12-03 17:31:25.751420246 +0100
+@@ -1567,7 +1567,7 @@ void SkiaOutputSurfaceImplOnGpu::CopyOut
  
        // Issue readbacks from the surfaces:
        for (size_t i = 0; i < CopyOutputResult::kNV12MaxPlanes; ++i) {
@@ -115,10 +270,10 @@ diff -up chromium-119.0.6045.59/components/viz/service/display_embedder/skia_out
          SkImageInfo dst_info = SkImageInfo::Make(
              size, (i == 0) ? kAlpha_8_SkColorType : kR8G8_unorm_SkColorType,
              kUnpremul_SkAlphaType);
-diff -up chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matching_constructor chromium-119.0.6045.59/content/browser/download/save_package.cc
---- chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/content/browser/download/save_package.cc	2023-10-30 16:51:02.271151512 +0100
-@@ -769,8 +769,8 @@ void SavePackage::Finish() {
+diff -up chromium-120.0.6099.56/content/browser/download/save_package.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/download/save_package.cc
+--- chromium-120.0.6099.56/content/browser/download/save_package.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/download/save_package.cc	2023-12-03 17:31:25.752420265 +0100
+@@ -767,8 +767,8 @@ void SavePackage::Finish() {
    if (download_) {
      std::vector<download::DownloadSaveItemData::ItemInfo> files;
      for (auto& item : saved_success_items_) {
@@ -129,52 +284,76 @@ diff -up chromium-119.0.6045.59/content/browser/download/save_package.cc.no_matc
      }
      download::DownloadSaveItemData::AttachItemData(download_, std::move(files));
    }
-diff -up chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc
---- chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor	2023-10-26 18:17:12.000000000 +0200
-+++ chromium-119.0.6045.59/content/browser/renderer_host/render_frame_host_impl.cc	2023-10-30 17:38:09.351389984 +0100
-@@ -8567,7 +8567,7 @@ void RenderFrameHostImpl::SendFencedFram
+diff -up chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc
+--- chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/interest_group/interest_group_storage.cc	2023-12-03 17:31:25.752420265 +0100
+@@ -3002,10 +3002,10 @@ DoGetKAnonymityData(sql::Database& db,
+ 
+   std::vector<StorageInterestGroup::KAnonymityData> k_anon_data;
+   while (interest_group_kanon_query.Step()) {
+-    k_anon_data.emplace_back(
++    k_anon_data.emplace_back() = {
+         /*key=*/interest_group_kanon_query.ColumnString(0),
+         /*is_k_anonymous=*/interest_group_kanon_query.ColumnBool(1),
+-        /*last_updated=*/interest_group_kanon_query.ColumnTime(2));
++        /*last_updated=*/interest_group_kanon_query.ColumnTime(2)};
+   }
+   if (!interest_group_kanon_query.Succeeded()) {
+     return absl::nullopt;
+diff -up chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc
+--- chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc.no_matching_constructor	2023-11-29 22:40:01.000000000 +0100
++++ chromium-120.0.6099.56/content/browser/renderer_host/render_frame_host_impl.cc	2023-12-03 20:49:28.059042672 +0100
+@@ -8685,7 +8685,7 @@ void RenderFrameHostImpl::SendFencedFram
    for (const blink::FencedFrame::ReportingDestination& destination :
         destinations) {
      SendFencedFrameReportingBeaconInternal(
 -        DestinationEnumEvent(event_type, event_data), destination,
 +        DestinationEnumEvent{event_type, event_data}, destination,
-         /*from_renderer=*/true, attribution_reporting_runtime_features,
-         GetFrameTreeNodeId());
+         /*from_renderer=*/true, attribution_reporting_runtime_features);
    }
-@@ -8603,7 +8603,7 @@ void RenderFrameHostImpl::SendFencedFram
+ }
+@@ -8720,7 +8720,7 @@ void RenderFrameHostImpl::SendFencedFram
    }
  
    SendFencedFrameReportingBeaconInternal(
 -      DestinationURLEvent(destination_url),
 +      DestinationURLEvent{destination_url},
        blink::FencedFrame::ReportingDestination::kBuyer,
-       /*from_renderer=*/true, attribution_reporting_runtime_features,
-       GetFrameTreeNodeId());
-@@ -8703,8 +8703,8 @@ void RenderFrameHostImpl::MaybeSendFence
+       /*from_renderer=*/true, attribution_reporting_runtime_features);
+ }
+@@ -8820,7 +8820,7 @@ void RenderFrameHostImpl::MaybeSendFence
          data = info->data;
        }
        initiator_rfh->SendFencedFrameReportingBeaconInternal(
--          DestinationEnumEvent(blink::kFencedFrameTopNavigationBeaconType,
--                               data),
-+          DestinationEnumEvent{blink::kFencedFrameTopNavigationBeaconType,
-+                               data},
-           destination,
+-          AutomaticBeaconEvent(event_type, data), destination,
++          AutomaticBeaconEvent{event_type, data}, destination,
            /*from_renderer=*/false, attribution_reporting_features,
-           GetFrameTreeNodeId(), navigation_request.GetNavigationId());
-@@ -8717,8 +8717,8 @@ void RenderFrameHostImpl::MaybeSendFence
+           navigation_request.GetNavigationId());
+     }
+@@ -8832,7 +8832,7 @@ void RenderFrameHostImpl::MaybeSendFence
      for (blink::FencedFrame::ReportingDestination destination :
           info->destinations) {
        initiator_rfh->SendFencedFrameReportingBeaconInternal(
--          DestinationEnumEvent(blink::kFencedFrameTopNavigationBeaconType,
--                               info->data),
-+          DestinationEnumEvent{blink::kFencedFrameTopNavigationBeaconType,
-+                               info->data},
-           destination,
+-          AutomaticBeaconEvent(event_type, info->data), destination,
++          AutomaticBeaconEvent{event_type, info->data}, destination,
            /*from_renderer=*/false, info->attribution_reporting_runtime_features,
-           GetFrameTreeNodeId(), navigation_request.GetNavigationId());
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h
---- chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor	2023-10-26 18:17:24.000000000 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_palette.h	2023-10-30 16:51:02.262151288 +0100
+           navigation_request.GetNavigationId());
+     }
+diff -up chromium-120.0.6099.56/net/dns/host_resolver_cache.cc.no_matching_constructor chromium-120.0.6099.56/net/dns/host_resolver_cache.cc
+--- chromium-120.0.6099.56/net/dns/host_resolver_cache.cc.no_matching_constructor	2023-11-29 22:40:07.000000000 +0100
++++ chromium-120.0.6099.56/net/dns/host_resolver_cache.cc	2023-12-03 17:31:25.754420303 +0100
+@@ -368,7 +368,7 @@ void HostResolverCache::Set(
+ 
+   std::string domain_name = result->domain_name();
+   entries_.emplace(
+-      Key(std::move(domain_name), network_anonymization_key),
++      Key{std::move(domain_name), network_anonymization_key},
+       Entry(std::move(result), source, secure, staleness_generation));
+ 
+   if (entries_.size() > max_entries_) {
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h
+--- chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h.no_matching_constructor	2023-11-29 22:40:12.000000000 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/font_palette.h	2023-12-03 17:31:25.754420303 +0100
 @@ -96,7 +96,7 @@ class PLATFORM_EXPORT FontPalette : publ
        Color::ColorSpace color_interpolation_space,
        absl::optional<Color::HueInterpolationMethod> hue_interpolation_method) {
@@ -193,9 +372,9 @@ diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/font_p
    }
  
    double GetAlphaMultiplier() const {
-diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
---- chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor	2023-10-26 18:17:24.000000000 +0200
-+++ chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palette_interpolation.cc	2023-10-30 16:51:02.261151263 +0100
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc
+--- chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc.no_matching_constructor	2023-11-29 22:40:12.000000000 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/platform/fonts/palette_interpolation.cc	2023-12-03 17:31:25.755420323 +0100
 @@ -31,7 +31,7 @@ Vector<FontPalette::FontPaletteOverride>
          color_interpolation_space, hue_interpolation_method, start_color,
          end_color, percentage, alpha_multiplier);
@@ -205,113 +384,22 @@ diff -up chromium-119.0.6045.59/third_party/blink/renderer/platform/fonts/palett
      result_color_records.push_back(result_color_record);
    }
    return result_color_records;
-diff -up chromium-119.0.6045.59/ui/gtk/gtk_ui.cc.no_matching_constructor chromium-119.0.6045.59/ui/gtk/gtk_ui.cc
---- chromium-119.0.6045.59/ui/gtk/gtk_ui.cc.no_matching_constructor	2023-10-26 18:18:14.000000000 +0200
-+++ chromium-119.0.6045.59/ui/gtk/gtk_ui.cc	2023-10-30 16:51:02.272151537 +0100
-@@ -993,11 +993,11 @@ ui::DisplayConfig GtkUi::GetDisplayConfi
-     GdkRectangle geometry;
-     gdk_monitor_get_geometry(monitor, &geometry);
-     int monitor_scale = std::max(1, gdk_monitor_get_scale_factor(monitor));
--    config.display_geometries.emplace_back(
-+    config.display_geometries.emplace_back() = {
-         gfx::Rect(monitor_scale * geometry.x, monitor_scale * geometry.y,
-                   monitor_scale * geometry.width,
-                   monitor_scale * geometry.height),
--        monitor_scale * font_scale);
-+        static_cast<float>(monitor_scale * font_scale)};
-   }
-   return config;
- }
-diff -up chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc.me chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc
---- chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc.me	2023-10-31 18:14:49.275728099 +0100
-+++ chromium-119.0.6045.59/base/metrics/persistent_histogram_allocator.cc	2023-10-31 18:19:54.599223239 +0100
-@@ -221,13 +221,13 @@ PersistentSparseHistogramDataManager::Lo
-     // The sample-record could be for any sparse histogram. Add the reference
-     // to the appropriate collection for later use.
-     if (found_id == match_id) {
--      found_records.emplace_back(ref, value);
-+      found_records.emplace_back() = {ref, value};
-       found = true;
+diff -up chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp.no_matching_constructor chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp
+--- chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp.no_matching_constructor	2023-11-29 22:41:46.000000000 +0100
++++ chromium-120.0.6099.56/third_party/pdfium/core/fpdfapi/render/cpdf_renderstatus.cpp	2023-12-03 17:31:25.756420342 +0100
+@@ -491,7 +491,7 @@ void CPDF_RenderStatus::ProcessClipPath(
      } else {
-       std::vector<ReferenceAndSample>* samples =
-           GetSampleMapRecordsWhileLocked(found_id);
-       CHECK(samples);
--      samples->emplace_back(ref, value);
-+      samples->emplace_back() = {ref, value};
+       m_pDevice->SetClip_PathFill(
+           *pPath, &mtObj2Device,
+-          CFX_FillRenderOptions(ClipPath.GetClipType(i)));
++          CFX_FillRenderOptions{ClipPath.GetClipType(i)});
      }
    }
  
-diff -up chromium-119.0.6045.59/net/dns/host_resolver_cache.cc.me chromium-119.0.6045.59/net/dns/host_resolver_cache.cc
---- chromium-119.0.6045.59/net/dns/host_resolver_cache.cc.me	2023-10-31 20:48:19.153868338 +0100
-+++ chromium-119.0.6045.59/net/dns/host_resolver_cache.cc	2023-10-31 20:51:37.634526549 +0100
-@@ -368,7 +368,7 @@ void HostResolverCache::Set(
- 
-   std::string domain_name = result->domain_name();
-   entries_.emplace(
--      Key(std::move(domain_name), network_anonymization_key),
-+      Key{std::move(domain_name), network_anonymization_key},
-       Entry(std::move(result), source, secure, staleness_generation));
- 
-   if (entries_.size() > max_entries_) {
-diff -up chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc.me chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc
---- chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc.me	2023-10-31 22:32:58.995997897 +0100
-+++ chromium-119.0.6045.59/components/autofill/core/browser/webdata/autofill_table.cc	2023-10-31 22:33:28.290520601 +0100
-@@ -1733,10 +1733,10 @@ std::unique_ptr<AutofillProfile> Autofil
-     }
- 
-     base::span<const uint8_t> observations_data = s.ColumnBlob(3);
--    field_type_values.emplace_back(
-+    field_type_values.emplace_back() = {
-         type, s.ColumnString16(1), s.ColumnInt(2),
-         std::vector<uint8_t>(observations_data.begin(),
--                             observations_data.end()));
-+                             observations_data.end())};
- 
-     if (type == ADDRESS_HOME_COUNTRY) {
-       country_code = base::UTF16ToUTF8(s.ColumnString16(1));
-diff -up chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc.than chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc
---- chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc.than	2023-10-31 22:41:22.850233005 +0100
-+++ chromium-119.0.6045.59/components/password_manager/core/browser/password_manager.cc	2023-10-31 22:42:37.276931933 +0100
-@@ -625,7 +625,7 @@ void PasswordManager::OnUserModifiedNonP
-   // |driver| might be empty on iOS or in tests.
-   int driver_id = driver ? driver->GetId() : 0;
-   possible_usernames_.Put(
--      PossibleUsernameFieldIdentifier(driver_id, renderer_id),
-+      PossibleUsernameFieldIdentifier{driver_id, renderer_id},
-       PossibleUsernameData(GetSignonRealm(driver->GetLastCommittedURL()),
-                            renderer_id, value, base::Time::Now(), driver_id,
-                            autocomplete_attribute_has_username, is_likely_otp));
-diff -up chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc.than chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc
---- chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc.than	2023-10-31 23:31:08.438267908 +0100
-+++ chromium-119.0.6045.59/content/browser/interest_group/interest_group_storage.cc	2023-10-31 23:32:08.979358711 +0100
-@@ -2854,10 +2854,10 @@ DoGetKAnonymityData(sql::Database& db,
- 
-   std::vector<StorageInterestGroup::KAnonymityData> k_anon_data;
-   while (interest_group_kanon_query.Step()) {
--    k_anon_data.emplace_back(
-+    k_anon_data.emplace_back() = {
-         /*key=*/interest_group_kanon_query.ColumnString(0),
-         /*is_k_anonymous=*/interest_group_kanon_query.ColumnBool(1),
--        /*last_updated=*/interest_group_kanon_query.ColumnTime(2));
-+        /*last_updated=*/interest_group_kanon_query.ColumnTime(2)};
-   }
-   if (!interest_group_kanon_query.Succeeded()) {
-     return absl::nullopt;
-diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc.than chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc
---- chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc.than	2023-11-01 11:19:42.745395797 +0100
-+++ chromium-119.0.6045.59/content/browser/webid/federated_auth_request_impl.cc	2023-11-01 11:22:16.670920679 +0100
-@@ -1881,7 +1881,7 @@ void FederatedAuthRequestImpl::ShowError
-       base::BindOnce(&FederatedAuthRequestImpl::CompleteRequestWithError,
-                      weak_ptr_factory_.GetWeakPtr()));
-   absl::optional<TokenError> token_error =
--      error ? absl::make_optional<TokenError>(error->code, error->url)
-+      error ? absl::make_optional<TokenError>({error->code, error->url})
-             : absl::nullopt;
- 
-   // TODO(crbug.com/1485710): Refactor IdentityCredentialTokenError
---- chromium-119.0.6045.59/ui/base/wayland/color_manager_util.h.no_matching_constructor	2023-10-26 18:18:14.000000000 +0200
-+++ chromium-119.0.6045.59/ui/base/wayland/color_manager_util.h	2023-11-01 17:29:54.269820415 +0100
-@@ -52,53 +52,53 @@
+diff -up chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h.no_matching_constructor chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h
+--- chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h.no_matching_constructor	2023-11-29 22:40:44.000000000 +0100
++++ chromium-120.0.6099.56/ui/base/wayland/color_manager_util.h	2023-12-03 17:31:25.755420323 +0100
+@@ -52,53 +52,53 @@ constexpr auto kChromaticityMap = base::
      zcr_color_manager_v1_chromaticity_names,
      PrimaryVersion>(
      {{ZCR_COLOR_MANAGER_V1_CHROMATICITY_NAMES_BT601_525_LINE,
@@ -391,7 +479,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  
  // A map from the zcr_color_manager_v1 eotf_names enum values
  // representing well-known EOTFs, to their equivalent TransferIDs.
-@@ -107,68 +107,68 @@
+@@ -107,68 +107,68 @@ constexpr auto kEotfMap = base::MakeFixe
      zcr_color_manager_v1_eotf_names,
      TransferVersion>({
      {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -498,7 +586,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  });
  
  // A map from the SDR zcr_color_manager_v1 eotf_names enum values
-@@ -177,18 +177,18 @@
+@@ -177,18 +177,18 @@ constexpr auto kEotfMap = base::MakeFixe
  constexpr auto kTransferMap =
      base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>({
          {ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -524,7 +612,7 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
      });
  
  // A map from the HDR zcr_color_manager_v1 eotf_names enum values
-@@ -197,70 +197,70 @@
+@@ -197,70 +197,70 @@ constexpr auto kTransferMap =
  constexpr auto kHDRTransferMap =
      base::MakeFixedFlatMap<zcr_color_manager_v1_eotf_names, TransferFnVersion>(
          {{ZCR_COLOR_MANAGER_V1_EOTF_NAMES_LINEAR,
@@ -628,76 +716,27 @@ diff -up chromium-119.0.6045.59/content/browser/webid/federated_auth_request_imp
  
  zcr_color_manager_v1_chromaticity_names ToColorManagerChromaticity(
      gfx::ColorSpace::PrimaryID primaryID,
-@@ -283,4 +283,4 @@
+@@ -283,4 +283,4 @@ zcr_color_manager_v1_eotf_names ToColorM
  
  }  // namespace ui::wayland
  
 -#endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
 \ Kein Zeilenumbruch am Dateiende.
 +#endif  // UI_BASE_WAYLAND_COLOR_MANAGER_UTIL_H_
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.me chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc.me	2023-11-01 20:46:15.997861278 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_previously_granted_view.cc	2023-11-01 20:49:33.603371680 +0100
-@@ -58,13 +58,13 @@ EmbeddedPermissionPromptPreviouslyGrante
- std::vector<EmbeddedPermissionPromptPreviouslyGrantedView::ButtonConfiguration>
- EmbeddedPermissionPromptPreviouslyGrantedView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
--  buttons.emplace_back(
-+  buttons.emplace_back() = {
-       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_CONTINUE_ALLOWING),
--      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal);
-+      ButtonType::kContinueAllowing, ui::ButtonStyle::kTonal};
- 
--  buttons.emplace_back(
-+  buttons.emplace_back() = {
-       l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_STOP_ALLOWING),
--      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal);
-+      ButtonType::kStopAllowing, ui::ButtonStyle::kTonal};
-   return buttons;
- }
- 
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.than chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc.than	2023-11-01 20:52:29.005464494 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_ask_view.cc	2023-11-01 21:14:12.741859604 +0100
-@@ -56,12 +56,12 @@ std::vector<EmbeddedPermissionPromptAskV
- EmbeddedPermissionPromptAskView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
-   if (base::FeatureList::IsEnabled(permissions::features::kOneTimePermission)) {
--    buttons.emplace_back(
-+    buttons.emplace_back() = {
-         l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_THIS_TIME),
--        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal);
-+        ButtonType::kAllowThisTime, ui::ButtonStyle::kTonal};
+diff -up chromium-120.0.6099.56/ui/gtk/gtk_ui.cc.no_matching_constructor chromium-120.0.6099.56/ui/gtk/gtk_ui.cc
+--- chromium-120.0.6099.56/ui/gtk/gtk_ui.cc.no_matching_constructor	2023-11-29 22:40:44.000000000 +0100
++++ chromium-120.0.6099.56/ui/gtk/gtk_ui.cc	2023-12-03 17:31:25.756420342 +0100
+@@ -1013,11 +1013,11 @@ ui::DisplayConfig GtkUi::GetDisplayConfi
+     GdkRectangle geometry;
+     gdk_monitor_get_geometry(monitor, &geometry);
+     int monitor_scale = std::max(1, gdk_monitor_get_scale_factor(monitor));
+-    config.display_geometries.emplace_back(
++    config.display_geometries.emplace_back() = {
+         gfx::Rect(monitor_scale * geometry.x, monitor_scale * geometry.y,
+                   monitor_scale * geometry.width,
+                   monitor_scale * geometry.height),
+-        monitor_scale * font_scale);
++        static_cast<float>(monitor_scale * font_scale)};
    }
--  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
--                       ButtonType::kAllow, ui::ButtonStyle::kTonal);
-+  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW),
-+                       ButtonType::kAllow, ui::ButtonStyle::kTonal};
-   return buttons;
- }
- 
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.me chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h.me	2023-11-01 21:22:02.222646903 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_base_view.h	2023-11-01 21:19:58.769619393 +0100
-@@ -72,6 +72,7 @@ class EmbeddedPermissionPromptBaseView :
-   struct RequestLineConfiguration {
-     const raw_ptr<const gfx::VectorIcon> icon;
-     std::u16string message;
-+    RequestLineConfiguration(auto i, auto m) : icon(i), message(m) { }
-   };
- 
-   struct ButtonConfiguration {
-diff -up chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.than chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc
---- chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc.than	2023-11-01 21:25:31.118626473 +0100
-+++ chromium-119.0.6045.59/chrome/browser/ui/views/permissions/embedded_permission_prompt_policy_view.cc	2023-11-01 21:30:06.383340274 +0100
-@@ -48,8 +48,8 @@ EmbeddedPermissionPromptPolicyView::GetR
- std::vector<EmbeddedPermissionPromptPolicyView::ButtonConfiguration>
- EmbeddedPermissionPromptPolicyView::GetButtonsConfiguration() {
-   std::vector<ButtonConfiguration> buttons;
--  buttons.emplace_back(l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
--                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal);
-+  buttons.emplace_back() = {l10n_util::GetStringUTF16(IDS_EMBEDDED_PROMPT_OK_LABEL),
-+                       ButtonType::kPolicyOK, ui::ButtonStyle::kTonal};
-   return buttons;
+   return config;
  }
- 
diff --git a/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch b/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
new file mode 100644
index 0000000000000..e80ed715aaf29
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-split-threshold-for-reg-with-hint.patch
@@ -0,0 +1,28 @@
+diff -up chromium-120.0.6099.35/build/config/compiler/BUILD.gn.than chromium-120.0.6099.35/build/config/compiler/BUILD.gn
+--- chromium-120.0.6099.35/build/config/compiler/BUILD.gn.than	2023-11-26 17:02:25.647022746 +0100
++++ chromium-120.0.6099.35/build/config/compiler/BUILD.gn	2023-11-26 17:15:58.025585358 +0100
+@@ -616,24 +616,6 @@ config("compiler") {
+       }
+     }
+ 
+-    # TODO(crbug.com/1488374): This causes binary size growth and potentially
+-    # other problems.
+-    # TODO(crbug.com/1491036): This isn't supported by Cronet's mainline llvm version.
+-    if (default_toolchain != "//build/toolchain/cros:target" &&
+-        !llvm_android_mainline) {
+-      cflags += [
+-        "-mllvm",
+-        "-split-threshold-for-reg-with-hint=0",
+-      ]
+-      if (use_thin_lto && is_a_target_toolchain) {
+-        if (is_win) {
+-          ldflags += [ "-mllvm:-split-threshold-for-reg-with-hint=0" ]
+-        } else {
+-          ldflags += [ "-Wl,-mllvm,-split-threshold-for-reg-with-hint=0" ]
+-        }
+-      }
+-    }
+-
+     # TODO(crbug.com/1235145): Investigate why/if this should be needed.
+     if (is_win) {
+       cflags += [ "/clang:-ffp-contract=off" ]
diff --git a/srcpkgs/chromium/patches/chromium-117-typename.patch b/srcpkgs/chromium/patches/chromium-120-typename.patch
similarity index 83%
rename from srcpkgs/chromium/patches/chromium-117-typename.patch
rename to srcpkgs/chromium/patches/chromium-120-typename.patch
index d3b00e7323603..9a2d878b12b54 100644
--- a/srcpkgs/chromium/patches/chromium-117-typename.patch
+++ b/srcpkgs/chromium/patches/chromium-120-typename.patch
@@ -1,3 +1,23 @@
+--- chromium-120.0.6099.56/base/containers/map_util.h.me	2023-12-02 19:00:19.696801563 +0100
++++ chromium-120.0.6099.56/base/containers/map_util.h	2023-12-02 19:00:47.049337547 +0100
+@@ -42,7 +42,7 @@
+ template <typename Map,
+           typename Key,
+           typename MappedElementType =
+-              std::pointer_traits<internal::MappedType<Map>>::element_type>
++              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
+ constexpr const MappedElementType* FindPtrOrNull(const Map& map,
+                                                  const Key& key) {
+   auto it = map.find(key);
+@@ -58,7 +58,7 @@
+ template <typename Map,
+           typename Key,
+           typename MappedElementType =
+-              std::pointer_traits<internal::MappedType<Map>>::element_type>
++              typename std::pointer_traits<internal::MappedType<Map>>::element_type>
+ constexpr MappedElementType* FindPtrOrNull(Map& map, const Key& key) {
+   auto it = map.find(key);
+   return it != map.end() ? std::to_address(it->second) : nullptr;
 diff -up chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc.me chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc
 --- chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc.me	2023-06-17 14:50:56.342591702 +0200
 +++ chromium-115.0.5790.24/chrome/browser/download/bubble/download_bubble_update_service.cc	2023-06-17 14:57:48.024377375 +0200
@@ -162,3 +182,24 @@ diff -up chromium-117.0.5938.62/components/supervised_user/core/browser/proto_fe
  
    // Remove fetcher under key from requests_in_flight_.
    void Remove(KeyType key);
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h.me chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h
+--- chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h.me	2023-12-04 00:29:35.197209538 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/bindings/core/v8/async_iterable.h	2023-12-04 00:30:24.436233249 +0100
+@@ -220,7 +220,7 @@ class PairAsyncIterable {
+  private:
+   virtual IterationSource* CreateIterationSource(
+       ScriptState* script_state,
+-      IterationSource::Kind kind,
++      typename IterationSource::Kind kind,
+       ExceptionState& exception_state) = 0;
+ };
+ 
+@@ -262,7 +262,7 @@ class ValueAsyncIterable {
+  private:
+   virtual IterationSource* CreateIterationSource(
+       ScriptState* script_state,
+-      IterationSource::Kind kind,
++      typename IterationSource::Kind kind,
+       ExceptionState& exception_state) = 0;
+ };
+ 
diff --git a/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch b/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
new file mode 100644
index 0000000000000..b06e29f29047a
--- /dev/null
+++ b/srcpkgs/chromium/patches/chromium-120-workaround_clang_bug-structured_binding.patch
@@ -0,0 +1,51 @@
+diff -up chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc
+--- chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc.workaround_clang_bug-structured_binding	2023-06-07 21:48:37.000000000 +0200
++++ chromium-115.0.5790.24/media/base/cdm_promise_adapter.cc	2023-06-17 16:53:20.216628557 +0200
+@@ -94,7 +94,9 @@ void CdmPromiseAdapter::RejectPromise(ui
+ void CdmPromiseAdapter::Clear(ClearReason reason) {
+   // Reject all outstanding promises.
+   DCHECK(thread_checker_.CalledOnValidThread());
+-  for (auto& [promise_id, promise] : promises_) {
++  for (auto& [p_i, p_e] : promises_) {
++    auto& promise_id = p_i;
++    auto& promise = p_e;
+     TRACE_EVENT_NESTABLE_ASYNC_END1(
+         "media", "CdmPromise", TRACE_ID_WITH_SCOPE("CdmPromise", promise_id),
+         "status", "cleared");
+diff -up chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc
+--- chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc.me	2023-06-19 08:04:02.287072722 +0200
++++ chromium-115.0.5790.32/content/browser/service_worker/service_worker_context_wrapper.cc	2023-06-19 08:18:24.576814950 +0200
+@@ -1393,7 +1393,8 @@ void ServiceWorkerContextWrapper::MaybeP
+     return;
+   }
+ 
+-  auto [document_url, key, callback] = std::move(*request);
++  auto [d_u, key, callback] = std::move(*request);
++  auto document_url = d_u;
+ 
+   DCHECK(document_url.is_valid());
+   TRACE_EVENT1("ServiceWorker",
+diff -up chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc.me chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc
+--- chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc.me	2023-12-03 22:17:50.922083200 +0100
++++ chromium-120.0.6099.56/third_party/blink/renderer/core/layout/grid/grid_layout_algorithm.cc	2023-12-03 22:22:55.437484343 +0100
+@@ -3447,7 +3447,8 @@ void GridLayoutAlgorithm::PlaceGridItems
+   DCHECK(out_row_break_between);
+ 
+   const auto& container_space = ConstraintSpace();
+-  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
++  const auto& [grid_items, l_d, tree_size] = sizing_tree.TreeRootData();
++  const auto& layout_data = l_d;
+ 
+   const auto* cached_layout_subtree = container_space.GetGridLayoutSubtree();
+   const auto container_writing_direction =
+@@ -3611,7 +3612,9 @@ void GridLayoutAlgorithm::PlaceGridItems
+ 
+   // TODO(ikilpatrick): Update |SetHasSeenAllChildren| and early exit if true.
+   const auto& constraint_space = ConstraintSpace();
+-  const auto& [grid_items, layout_data, tree_size] = sizing_tree.TreeRootData();
++  const auto& [g_i, l_d, tree_size] = sizing_tree.TreeRootData();
++  const auto& grid_items = g_i;
++  const auto& layout_data = l_d;
+ 
+   const auto* cached_layout_subtree = constraint_space.GetGridLayoutSubtree();
+   const auto container_writing_direction =
diff --git a/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch b/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
index afcdae179850a..b3dd2c33f0f21 100644
--- a/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
+++ b/srcpkgs/chromium/patches/fix-aarch64-musl-memory-tagging-macros.patch
@@ -1,5 +1,5 @@
---- a/base/allocator/partition_allocator/tagging.cc
-+++ b/base/allocator/partition_allocator/tagging.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/tagging.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/tagging.cc
 @@ -28,13 +28,25 @@
  #endif
  #endif
diff --git a/srcpkgs/chromium/patches/musl-no-execinfo.patch b/srcpkgs/chromium/patches/musl-no-execinfo.patch
index fac2b6d190e78..7407f1b9db38a 100644
--- a/srcpkgs/chromium/patches/musl-no-execinfo.patch
+++ b/srcpkgs/chromium/patches/musl-no-execinfo.patch
@@ -83,12 +83,3 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1
  // StackTrace::OutputToStream() is not implemented under uclibc, nor AIX.
  // See https://crbug.com/706728
  
-@@ -156,7 +156,7 @@
- 
- #endif  // !defined(__UCLIBC__) && !defined(_AIX)
- 
--#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID)
-+#if (BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !BUILDFLAG(IS_ANDROID)
- #if !BUILDFLAG(IS_IOS)
- static char* newArray() {
-   // Clang warns about the mismatched new[]/delete if they occur in the same
diff --git a/srcpkgs/chromium/patches/musl-no-mallinfo.patch b/srcpkgs/chromium/patches/musl-no-mallinfo.patch
index cd728ecfb112d..a58ee08a435a0 100644
--- a/srcpkgs/chromium/patches/musl-no-mallinfo.patch
+++ b/srcpkgs/chromium/patches/musl-no-mallinfo.patch
@@ -101,8 +101,8 @@ musl does not implement mallinfo()/mallinfo2()
  
  /* Define to 1 if you have the <malloc.h> header file. */
  #define HAVE_MALLOC_H 1
---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
-+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc
 @@ -717,7 +717,7 @@
  
  #endif  // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID)
@@ -112,8 +112,8 @@ musl does not implement mallinfo()/mallinfo2()
  SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW {
    base::SimplePartitionStatsDumper allocator_dumper;
    Allocator()->DumpStats("malloc", true, &allocator_dumper);
---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
-+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc
 @@ -24,7 +24,7 @@
  #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC)
  
diff --git a/srcpkgs/chromium/patches/musl-partition-atfork.patch b/srcpkgs/chromium/patches/musl-partition-atfork.patch
index 2910aa2bbf9b1..35d810055fbb5 100644
--- a/srcpkgs/chromium/patches/musl-partition-atfork.patch
+++ b/srcpkgs/chromium/patches/musl-partition-atfork.patch
@@ -1,5 +1,5 @@
---- a/base/allocator/partition_allocator/partition_root.cc
-+++ b/base/allocator/partition_allocator/partition_root.cc
+--- a/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc
++++ b/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc
 @@ -239,7 +239,7 @@
    if (!g_global_init_called.compare_exchange_strong(expected, true))
      return;
diff --git a/srcpkgs/chromium/patches/no-mte.patch b/srcpkgs/chromium/patches/no-mte.patch
deleted file mode 100644
index 56167e1e5c576..0000000000000
--- a/srcpkgs/chromium/patches/no-mte.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/base/allocator/partition_allocator/partition_alloc_config.h
-+++ b/base/allocator/partition_allocator/partition_alloc_config.h
-@@ -153,7 +153,7 @@
-    defined(ARCH_CPU_LITTLE_ENDIAN))
- 
- #define PA_CONFIG_HAS_MEMORY_TAGGING()              \
--  (defined(ARCH_CPU_ARM64) && defined(__clang__) && \
-+  (0 && defined(ARCH_CPU_ARM64) && defined(__clang__) && \
-    !defined(ADDRESS_SANITIZER) &&                   \
-    (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)))
- 
diff --git a/srcpkgs/chromium/template b/srcpkgs/chromium/template
index b023946f3ec7b..d07c20477fe2b 100644
--- a/srcpkgs/chromium/template
+++ b/srcpkgs/chromium/template
@@ -1,8 +1,8 @@
 # Template file for 'chromium'
 pkgname=chromium
 # See https://chromiumdash.appspot.com/releases?platform=Linux for the latest version
-version=119.0.6045.105
-revision=3
+version=120.0.6099.109
+revision=1
 archs="i686* x86_64* aarch64* armv7l*"
 hostmakedepends="
  $(vopt_if clang "clang lld llvm15")
@@ -10,12 +10,12 @@ hostmakedepends="
  libepoxy-devel libevent-devel libglib-devel"
 makedepends="
  alsa-lib-devel libdav1d-devel brotli-devel cups-devel elfutils-devel ffmpeg-devel
- fontconfig-devel freetype-devel gtk+3-devel jsoncpp-devel libXScrnSaver-devel
+ fontconfig-devel freetype-devel gtk+3-devel libXScrnSaver-devel
  libXcomposite-devel libXcursor-devel libXdamage-devel libXi-devel libXrandr-devel
  libavif-devel libcap-devel libcurl-devel libdrm-devel libevent-devel
  libexif-devel libflac-devel libgcrypt-devel libjpeg-turbo-devel libmtp-devel
  libpng-devel libva-devel libwebp-devel libxml2-devel libxshmfence-devel
- libxslt-devel woff2-devel minizip-devel mit-krb5-devel nss-devel opus-devel
+ libxslt-devel minizip-devel mit-krb5-devel nss-devel opus-devel
  pciutils-devel snappy-devel speech-dispatcher-devel speex-devel
  xcb-proto zlib-devel libaom-devel libffi-devel libevdev-devel
  $(vopt_if pipewire pipewire-devel)
@@ -27,13 +27,14 @@ maintainer="Duncaen <duncaen@voidlinux.org>"
 license="BSD-3-Clause"
 homepage="https://www.chromium.org/"
 distfiles="https://commondatastorage.googleapis.com/chromium-browser-official/${pkgname}-${version}.tar.xz"
-checksum=73cb8c39e928f8c627d747d37a3b020f08913ef5508f893758d70bdbd545dbcf
+checksum=87c00c525ee07c2233b78dbece1496b697f686244a67fac2c71e4a30bd96849b
 
 lib32disabled=yes
 
-build_options="clang debug vaapi pulseaudio sndio pipewire"
-build_options_default="clang vaapi pulseaudio pipewire"
+build_options="clang libcxx debug vaapi pulseaudio sndio pipewire"
+build_options_default="clang libcxx vaapi pulseaudio pipewire"
 desc_option_clang="Use clang to build"
+desc_option_libcxx="Use bundled libc++"
 desc_option_debug="Build with debug symbols"
 desc_option_pipewire="Enable support for screen sharing for WebRTC via PipeWire"
 
@@ -52,7 +53,7 @@ if [ "$CROSS_BUILD" ]; then
 	 $(vopt_if pipewire pipewire-devel) ffmpeg-devel opus-devel pango-devel libva-devel
 	 libcurl-devel snappy-devel libXrandr-devel libXcomposite-devel cups-devel
 	 mit-krb5-devel alsa-lib-devel libXdamage-devel libepoxy-devel libevdev-devel
-	 libavif-devel libaom-devel jsoncpp-devel woff2-devel libdav1d-devel libflac-devel
+	 libavif-devel libaom-devel libdav1d-devel libflac-devel
 	 libdrm-devel libgbm-devel"
 fi
 
@@ -82,6 +83,9 @@ post_patch() {
 	# allow system dependencies in "official builds"
 	vsed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \
 		tools/generate_shim_headers/generate_shim_headers.py
+
+	mkdir -p third_party/node/linux/node-linux-x64/bin
+	ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/
 }
 
 _setup_clang() {
@@ -100,7 +104,7 @@ _setup_clang() {
 	export BUILD_NM=llvm-nm
 	export BUILD_CFLAGS="-Wno-unknown-warning-option"
 	export BUILD_CXXFLAGS="-Wno-unknown-warning-option"
-	if [ "$CROSS_BUILD" ]; then
+	if [[ -n "$CROSS_BUILD" && -n "$build_option_libcxx" ]]; then
 		CFLAGS+=" --gcc-toolchain=/usr"
 		CFLAGS+=" --sysroot=${XBPS_CROSS_BASE}"
 		CFLAGS+=" -nostdinc"
@@ -144,6 +148,8 @@ do_configure() {
 	# use_system_v8=1
 	# bzip2 xdg_utils speex
 	# XXX: harfbuzz-ng use builtin one until system-wide is updated >=3.0.0
+	# libcxx https://github.com/llvm/llvm-project/issues/61705:
+	# snappy
 	system="
 		ffmpeg
 		flac
@@ -157,7 +163,6 @@ do_configure() {
 		libxml
 		libxslt
 		opus
-		snappy
 	"
 
 	# remove build scripts for system provided dependencies - basically does the
@@ -192,7 +197,7 @@ do_configure() {
 		'clang_base_path="/usr"'
 
 		"gold_path=\"${XBPS_CROSS_BASE}/usr/bin/ld.gold\""
-		'use_custom_libcxx=false'
+		"use_custom_libcxx=$(vopt_if libcxx true false)" # https://github.com/llvm/llvm-project/issues/61705
 		'use_gold=false'
 
 		'rust_sysroot_absolute="/usr"'
@@ -304,7 +309,6 @@ do_install() {
 	vmkdir usr/lib/chromium/locales
 	vcopy "out/Release/locales/*.pak" usr/lib/chromium/locales
 
-	vinstall ${FILESDIR}/chromium.desktop 644 usr/share/applications
 
 	vinstall out/Release/icudtl.dat 0644 usr/lib/chromium
 
@@ -322,4 +326,14 @@ do_install() {
 	vbin ${FILESDIR}/chromium.sh chromium
 	vlicense LICENSE
 	ln -sf /usr/lib/chromium/chromedriver ${DESTDIR}/usr/bin/chromedriver
+
+	vinstall chrome/installer/linux/common/desktop.template 644 usr/share/applications chromium.desktop
+	vman chrome/app/resources/manpage.1.in chromium.1
+
+	sed -i \
+		-e 's/@@MENUNAME@@/Chromium/g' \
+		-e 's/@@PACKAGE@@/chromium/g' \
+		-e 's/@@USR_BIN_SYMLINK_NAME@@/chromium/g' \
+		${DESTDIR}/usr/share/man/man1/chromium.1 \
+		${DESTDIR}/usr/share/applications/chromium.desktop
 }
diff --git a/srcpkgs/chromium/update b/srcpkgs/chromium/update
index c035a8fe1c3b3..af42867275488 100644
--- a/srcpkgs/chromium/update
+++ b/srcpkgs/chromium/update
@@ -1,2 +1,2 @@
-site='https://omahaproxy.appspot.com/all'
-pattern='linux,stable,\K[^,]*'
+site='https://chromiumdash.appspot.com/fetch_releases?channel=Stable&platform=Linux&num=1&offset=0'
+pattern='"version":\s*"\K[^,]+(?=")'

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PR PATCH] [Merged]: chromium: update to 120.0.6099.109.
  2023-12-13 17:44 [PR PATCH] chromium: update to 120.0.6099.109 Duncaen
                   ` (3 preceding siblings ...)
  2023-12-13 23:44 ` Duncaen
@ 2023-12-14 23:13 ` Duncaen
  4 siblings, 0 replies; 6+ messages in thread
From: Duncaen @ 2023-12-14 23:13 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 251 bytes --]

There's a merged pull request on the void-packages repository

chromium: update to 120.0.6099.109.
https://github.com/void-linux/void-packages/pull/47739

Description:
[ci skip]

* [x] x86_64-glibc
* [x] x86_64-musl
* [x] aarch64-musl
* [ ] i686

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-12-14 23:13 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-13 17:44 [PR PATCH] chromium: update to 120.0.6099.109 Duncaen
2023-12-13 17:59 ` [PR PATCH] [Updated] " Duncaen
2023-12-13 18:06 ` Duncaen
2023-12-13 18:13 ` Duncaen
2023-12-13 23:44 ` Duncaen
2023-12-14 23:13 ` [PR PATCH] [Merged]: " Duncaen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).