Browse Source

chore: bump chromium to 135.0.7015.0 (main) (#45500)

* https://chromium-review.googlesource.com/c/chromium/src/+/6230977

* chore: bump chromium to 135.0.7012.0

* chore: update accelerator.patch

Support parsing Ctrl+Alt shortcuts | https://chromium-review.googlesource.com/c/chromium/src/+/6238137

* 6234236: Reapply bindings: Pass CppHeap on Isolate creation | https://chromium-review.googlesource.com/c/chromium/src/+/6234236

* 6234614: [ios blink] Move to use external begin frame source | https://chromium-review.googlesource.com/c/chromium/src/+/6234614

* chore: update chromium/feat_add_streaming-protocol_registry_to_multibuffer_data_source.patch

no manual changes; patch applied with fuzz

* chore: update chromium/build_libc_as_static_library.patch

no manual changes; patch applied with fuzz

* chore: remove chromium/cherry-pick-dd8e2822e507.patch

landed upstream

* 6188884: Grit: Remove output_all_resource_defines from list of valid attributes. | https://chromium-review.googlesource.com/c/chromium/src/+/6188884

* 6226981: [views-ax] Remove View::GetAccessibleNodeData() method | https://chromium-review.googlesource.com/c/chromum/src/+/6226981

* 6214895: [views-ax] Deprecate View::NotifyAccessibilityEvent | https://chromium-review.googlesource.com/c/chromium/src/+/6214895

* 6196494: Remove ImageView::SetImage() with ImageSkia param | https://chromium-review.googlesource.com/c/chromium/src/+/6196494

* 6236267: [cleanup] Remove unused PrinterBasicInfo fields | https://chromium-review.googlesource.com/c/chromium/src/+/6236267

* refactor: remove status, isDefault properties from PrinterInfo

Xref: https://chromium-review.googlesource.com/c/chromium/src/+/6236267

* chore: lint

* fixup: added mas bypass to new file added in https://chromium-review.googlesource.com/c/chromium/src/+/6208630 see slack for more context

* chore: node script/gen-libc++-filenames.js

* chore: e patches all

* fix: duplicate crdtp symbols

* chore: update patches

* fixup! [Media Features] Remove launched features

---------

Co-authored-by: alice <[email protected]>
Co-authored-by: Charles Kerr <[email protected]>
Co-authored-by: deepak1556 <[email protected]>
electron-roller[bot] 1 month ago
parent
commit
47572286f3
82 changed files with 414 additions and 601 deletions
  1. 1 1
      DEPS
  2. 0 4
      docs/api/structures/printer-info.md
  3. 5 0
      docs/breaking-changes.md
  4. 1 1
      electron_resources.grd
  5. 4 2
      filenames.libcxx.gni
  6. 0 2
      patches/chromium/.patches
  7. 4 13
      patches/chromium/accelerator.patch
  8. 3 3
      patches/chromium/add_contentgpuclient_precreatemessageloop_callback.patch
  9. 2 2
      patches/chromium/add_didinstallconditionalfeatures.patch
  10. 3 3
      patches/chromium/allow_disabling_blink_scheduler_throttling_per_renderview.patch
  11. 3 3
      patches/chromium/blink_local_frame.patch
  12. 7 7
      patches/chromium/build_do_not_depend_on_packed_resource_integrity.patch
  13. 1 1
      patches/chromium/build_gn.patch
  14. 4 4
      patches/chromium/build_libc_as_static_library.patch
  15. 7 7
      patches/chromium/can_create_window.patch
  16. 0 71
      patches/chromium/cherry-pick-dd8e2822e507.patch
  17. 2 2
      patches/chromium/chore_add_electron_deps_to_gitignores.patch
  18. 4 4
      patches/chromium/chore_introduce_blocking_api_for_electron.patch
  19. 1 1
      patches/chromium/chore_partial_revert_of.patch
  20. 2 2
      patches/chromium/chore_patch_out_partition_attribute_dcheck_for_webviews.patch
  21. 7 7
      patches/chromium/chore_provide_iswebcontentscreationoverridden_with_full_params.patch
  22. 4 4
      patches/chromium/create_browser_v8_snapshot_file_name_fuse.patch
  23. 16 11
      patches/chromium/desktop_media_list.patch
  24. 1 1
      patches/chromium/disable_compositor_recycling.patch
  25. 2 2
      patches/chromium/disable_freezing_flags_after_init_in_node.patch
  26. 5 5
      patches/chromium/disable_hidden.patch
  27. 1 1
      patches/chromium/expose_setuseragent_on_networkcontext.patch
  28. 6 6
      patches/chromium/feat_add_signals_when_embedder_cleanup_callbacks_run_for.patch
  29. 5 5
      patches/chromium/feat_add_streaming-protocol_registry_to_multibuffer_data_source.patch
  30. 10 10
      patches/chromium/feat_add_support_for_missing_dialog_features_to_shell_dialogs.patch
  31. 4 4
      patches/chromium/feat_configure_launch_options_for_service_process.patch
  32. 12 13
      patches/chromium/feat_enable_offscreen_rendering_with_viz_compositor.patch
  33. 2 2
      patches/chromium/feat_enable_passing_exit_code_on_service_process_crash.patch
  34. 1 1
      patches/chromium/feat_expose_raw_response_headers_from_urlloader.patch
  35. 2 2
      patches/chromium/fix_crash_loading_non-standard_schemes_in_iframes.patch
  36. 3 3
      patches/chromium/fix_disabling_background_throttling_in_compositor.patch
  37. 1 1
      patches/chromium/fix_font_face_resolution_when_renderer_is_blocked.patch
  38. 5 5
      patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch
  39. 0 236
      patches/chromium/fix_osr_stutter_in_both_cpu_and_gpu_capture_when_page_has_animation.patch
  40. 2 2
      patches/chromium/fix_restore_original_resize_performance_on_macos.patch
  41. 9 9
      patches/chromium/fix_return_v8_value_from_localframe_requestexecutescript.patch
  42. 2 2
      patches/chromium/fix_select_the_first_menu_item_when_opened_via_keyboard.patch
  43. 2 2
      patches/chromium/frame_host_manager.patch
  44. 4 4
      patches/chromium/gin_enable_disable_v8_platform.patch
  45. 2 2
      patches/chromium/gritsettings_resource_ids.patch
  46. 2 2
      patches/chromium/hack_to_allow_gclient_sync_with_host_os_mac_on_linux_in_ci.patch
  47. 1 1
      patches/chromium/ignore_parse_errors_for_pkey_appusermodel_toastactivatorclsid.patch
  48. 15 15
      patches/chromium/isolate_holder.patch
  49. 2 2
      patches/chromium/load_v8_snapshot_in_browser_process.patch
  50. 87 25
      patches/chromium/mas_avoid_private_macos_api_usage.patch.patch
  51. 1 1
      patches/chromium/network_service_allow_remote_certificate_verification_logic.patch
  52. 1 1
      patches/chromium/notification_provenance.patch
  53. 1 1
      patches/chromium/partially_revert_is_newly_created_to_allow_for_browser_initiated.patch
  54. 2 2
      patches/chromium/port_autofill_colors_to_the_color_pipeline.patch
  55. 2 2
      patches/chromium/printing.patch
  56. 4 4
      patches/chromium/refactor_expose_cursor_changes_to_the_webcontentsobserver.patch
  57. 3 3
      patches/chromium/refactor_expose_file_system_access_blocklist.patch
  58. 1 1
      patches/chromium/refactor_expose_hostimportmoduledynamically_and.patch
  59. 1 1
      patches/chromium/refactor_unfilter_unresponsive_events.patch
  60. 5 5
      patches/chromium/render_widget_host_view_base.patch
  61. 1 1
      patches/chromium/render_widget_host_view_mac.patch
  62. 1 1
      patches/chromium/resource_file_conflict.patch
  63. 2 2
      patches/chromium/scroll_bounce_flag.patch
  64. 1 1
      patches/chromium/support_mixed_sandbox_with_zygote.patch
  65. 2 2
      patches/chromium/web_contents.patch
  66. 3 3
      patches/chromium/webview_fullscreen.patch
  67. 2 2
      patches/devtools_frontend/chore_expose_ui_to_allow_electron_to_set_dock_side.patch
  68. 1 0
      patches/node/.patches
  69. 86 0
      patches/node/build_option_to_use_custom_inspector_protocol_path.patch
  70. 2 2
      patches/v8/deps_add_v8_object_setinternalfieldfornodecore.patch
  71. 1 1
      shell/browser/api/electron_api_base_window.cc
  72. 0 2
      shell/browser/api/electron_api_printing.cc
  73. 1 1
      shell/browser/api/views/electron_api_image_view.cc
  74. 3 3
      shell/browser/browser.h
  75. 1 1
      shell/browser/ui/cocoa/electron_bundle_mover.mm
  76. 5 13
      shell/browser/ui/views/autofill_popup_view.cc
  77. 2 4
      shell/browser/ui/views/autofill_popup_view.h
  78. 6 6
      shell/browser/ui/views/global_menu_bar_x11.cc
  79. 3 5
      shell/browser/ui/views/menu_bar.cc
  80. 0 3
      shell/browser/ui/views/menu_bar.h
  81. 1 6
      shell/browser/ui/views/submenu_button.cc
  82. 0 3
      shell/browser/ui/views/submenu_button.h

+ 1 - 1
DEPS

@@ -2,7 +2,7 @@ gclient_gn_args_from = 'src'
 
 vars = {
   'chromium_version':
-    '134.0.6998.10',
+    '135.0.7012.0',
   'node_version':
     'v22.14.0',
   'nan_version':

+ 0 - 4
docs/api/structures/printer-info.md

@@ -3,8 +3,6 @@
 * `name` string - the name of the printer as understood by the OS.
 * `displayName` string - the name of the printer as shown in Print Preview.
 * `description` string - a longer description of the printer's type.
-* `status` number - the current status of the printer.
-* `isDefault` boolean - whether or not a given printer is set as the default printer on the OS.
 * `options` Object - an object containing a variable number of platform-specific printer information.
 
 The number represented by `status` means different things on different platforms: on Windows its potential values can be found [here](https://learn.microsoft.com/en-us/windows/win32/printdocs/printer-info-2), and on Linux and macOS they can be found [here](https://www.cups.org/doc/cupspm.html).
@@ -19,8 +17,6 @@ may be different on each platform.
   name: 'Austin_4th_Floor_Printer___C02XK13BJHD4',
   displayName: 'Austin 4th Floor Printer @ C02XK13BJHD4',
   description: 'TOSHIBA ColorMFP',
-  status: 3,
-  isDefault: false,
   options: {
     copies: '1',
     'device-uri': 'dnssd://Austin%204th%20Floor%20Printer%20%40%20C02XK13BJHD4._ipps._tcp.local./?uuid=71687f1e-1147-3274-6674-22de61b110bd',

+ 5 - 0
docs/breaking-changes.md

@@ -14,6 +14,11 @@ This document uses the following convention to categorize breaking changes:
 
 ## Planned Breaking API Changes (35.0)
 
+### Removed:`isDefault` and `status` properties on `PrinterInfo`
+
+These properties have been removed from the PrinterInfo Object
+because they have been removed from upstream Chromium.
+
 ### Deprecated: `getFromVersionID` on `session.serviceWorkers`
 
 The `session.serviceWorkers.fromVersionID(versionId)` API has been deprecated

+ 1 - 1
electron_resources.grd

@@ -2,7 +2,7 @@
 <!-- The Resource ids for messages start from 31750 and for includes
      it starts from 31950, make sure they don't overlap when the limit
      exceeds in //tools/gritsettings/resource_ids -->
-<grit latest_public_release="0" current_release="1" output_all_resource_defines="false"
+<grit latest_public_release="0" current_release="1"
       source_lang_id="en">
   <outputs>
     <output filename="grit/electron_resources.h" type="rc_header">

+ 4 - 2
filenames.libcxx.gni

@@ -1519,7 +1519,6 @@ libcxx_headers = [
   "//third_party/libc++/src/include/__locale",
   "//third_party/libc++/src/include/__locale_dir/locale_base_api/android.h",
   "//third_party/libc++/src/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h",
-  "//third_party/libc++/src/include/__locale_dir/locale_base_api/fuchsia.h",
   "//third_party/libc++/src/include/__locale_dir/locale_base_api/ibm.h",
   "//third_party/libc++/src/include/__locale_dir/locale_base_api/musl.h",
   "//third_party/libc++/src/include/__locale_dir/locale_base_api/openbsd.h",
@@ -1528,6 +1527,9 @@ libcxx_headers = [
   "//third_party/libc++/src/include/__locale_dir/support/apple.h",
   "//third_party/libc++/src/include/__locale_dir/support/bsd_like.h",
   "//third_party/libc++/src/include/__locale_dir/support/freebsd.h",
+  "//third_party/libc++/src/include/__locale_dir/support/fuchsia.h",
+  "//third_party/libc++/src/include/__locale_dir/support/no_locale/characters.h",
+  "//third_party/libc++/src/include/__locale_dir/support/no_locale/strtonum.h",
   "//third_party/libc++/src/include/__locale_dir/support/windows.h",
   "//third_party/libc++/src/include/__math/abs.h",
   "//third_party/libc++/src/include/__math/copysign.h",
@@ -1568,7 +1570,6 @@ libcxx_headers = [
   "//third_party/libc++/src/include/__memory/array_cookie.h",
   "//third_party/libc++/src/include/__memory/assume_aligned.h",
   "//third_party/libc++/src/include/__memory/auto_ptr.h",
-  "//third_party/libc++/src/include/__memory/builtin_new_allocator.h",
   "//third_party/libc++/src/include/__memory/compressed_pair.h",
   "//third_party/libc++/src/include/__memory/concepts.h",
   "//third_party/libc++/src/include/__memory/construct_at.h",
@@ -1901,6 +1902,7 @@ libcxx_headers = [
   "//third_party/libc++/src/include/__utility/cmp.h",
   "//third_party/libc++/src/include/__utility/convert_to_integral.h",
   "//third_party/libc++/src/include/__utility/declval.h",
+  "//third_party/libc++/src/include/__utility/element_count.h",
   "//third_party/libc++/src/include/__utility/empty.h",
   "//third_party/libc++/src/include/__utility/exception_guard.h",
   "//third_party/libc++/src/include/__utility/exchange.h",

+ 0 - 2
patches/chromium/.patches

@@ -140,5 +140,3 @@ revert_code_health_clean_up_stale_macwebcontentsocclusion.patch
 ignore_parse_errors_for_pkey_appusermodel_toastactivatorclsid.patch
 feat_add_signals_when_embedder_cleanup_callbacks_run_for.patch
 feat_separate_content_settings_callback_for_sync_and_async_clipboard.patch
-cherry-pick-dd8e2822e507.patch
-fix_osr_stutter_in_both_cpu_and_gpu_capture_when_page_has_animation.patch

+ 4 - 13
patches/chromium/accelerator.patch

@@ -10,7 +10,7 @@ This patch makes three changes to Accelerator::GetShortcutText to improve shortc
 3. Ctrl-Shift-= and Ctrl-Plus show up as such
 
 diff --git a/ui/base/accelerators/accelerator.cc b/ui/base/accelerators/accelerator.cc
-index 1f90103d1ddb04a24797cf1214c3d0c862d77e9f..67eec0d3526349448a56acf9724806aec06104df 100644
+index 5590f9d425229d87373c5b53651d2e2d17b779e4..407cbd7e7811e3053e35e26f24e3c049cdd59a46 100644
 --- a/ui/base/accelerators/accelerator.cc
 +++ b/ui/base/accelerators/accelerator.cc
 @@ -12,6 +12,7 @@
@@ -48,20 +48,11 @@ index 1f90103d1ddb04a24797cf1214c3d0c862d77e9f..67eec0d3526349448a56acf9724806ae
      const std::u16string& shortcut) const {
    std::u16string result = shortcut;
  
--  if (IsShiftDown())
-+  if (!shifted_char && IsShiftDown())
+-  if (IsShiftDown()) {
++  if (!shifted_char && IsShiftDown()) {
      result = ApplyModifierToAcceleratorString(result, IDS_APP_SHIFT_KEY);
+   }
  
-   // Note that we use 'else-if' in order to avoid using Ctrl+Alt as a shortcut.
-@@ -325,7 +335,7 @@ std::u16string Accelerator::ApplyLongFormModifiers(
-   // more information.
-   if (IsCtrlDown())
-     result = ApplyModifierToAcceleratorString(result, IDS_APP_CTRL_KEY);
--  else if (IsAltDown())
-+  if (IsAltDown())
-     result = ApplyModifierToAcceleratorString(result, IDS_APP_ALT_KEY);
- 
-   if (IsCmdDown()) {
 diff --git a/ui/base/accelerators/accelerator.h b/ui/base/accelerators/accelerator.h
 index 198c7469f410d3516b8a18493c5e4588d02487c2..e4995824ae2f3bb8045a3841a6213a4b315845a8 100644
 --- a/ui/base/accelerators/accelerator.h

+ 3 - 3
patches/chromium/add_contentgpuclient_precreatemessageloop_callback.patch

@@ -10,10 +10,10 @@ Allows Electron to restore WER when ELECTRON_DEFAULT_ERROR_MODE is set.
 This should be upstreamed.
 
 diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
-index 5480d568880a74ab41edfeee98eafdb893889e98..88269b39898481f1dfc2549f4d73040256c0bb43 100644
+index 0d8bb93bf146c3058a30693673f0c23fdea90ae8..55f76337a445345c06531ce05e603db30daf759f 100644
 --- a/content/gpu/gpu_main.cc
 +++ b/content/gpu/gpu_main.cc
-@@ -263,6 +263,10 @@ int GpuMain(MainFunctionParams parameters) {
+@@ -268,6 +268,10 @@ int GpuMain(MainFunctionParams parameters) {
    // to the GpuProcessHost once the GpuServiceImpl has started.
    viz::GpuServiceImpl::InstallPreInitializeLogHandler();
  
@@ -24,7 +24,7 @@ index 5480d568880a74ab41edfeee98eafdb893889e98..88269b39898481f1dfc2549f4d730402
    // We are experiencing what appear to be memory-stomp issues in the GPU
    // process. These issues seem to be impacting the task executor and listeners
    // registered to it. Create the task executor on the heap to guard against
-@@ -373,7 +377,6 @@ int GpuMain(MainFunctionParams parameters) {
+@@ -378,7 +382,6 @@ int GpuMain(MainFunctionParams parameters) {
  #endif
    const bool dead_on_arrival = !init_success;
  

+ 2 - 2
patches/chromium/add_didinstallconditionalfeatures.patch

@@ -23,10 +23,10 @@ index bb4d6c56978469d3c2efb4b2d519a7a69ef538b0..b164e89a394df060f6154ad2acadf15d
                                          int32_t world_id) {}
    virtual void DidClearWindowObject() {}
 diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
-index 256275528ddbdbc22736e73e43d385d9cdfca264..a0884192a3137dade6704f3a26d726105478bf72 100644
+index 51d32ef662315d4a9dcc544093dd1d5e93d39c6f..827f64a8b4299222ff1e9c2ee492bbdea5c1cc32 100644
 --- a/content/renderer/render_frame_impl.cc
 +++ b/content/renderer/render_frame_impl.cc
-@@ -4779,6 +4779,12 @@ void RenderFrameImpl::DidCreateScriptContext(v8::Local<v8::Context> context,
+@@ -4780,6 +4780,12 @@ void RenderFrameImpl::DidCreateScriptContext(v8::Local<v8::Context> context,
      observer.DidCreateScriptContext(context, world_id);
  }
  

+ 3 - 3
patches/chromium/allow_disabling_blink_scheduler_throttling_per_renderview.patch

@@ -23,10 +23,10 @@ index 6c679ef877067297ec3bf1a23af6c03a2af8dcf5..1ac93433189580c13b69cd52ce62681a
      return receiver_.BindNewEndpointAndPassDedicatedRemote();
    }
 diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
-index ac0856149902d266654ed245a5b4933ad7f239d0..26560099f3419247b2d27ccce3538ca1b4b65afd 100644
+index a387789fe4270739408a9beb32a5ad1a8e51e5f6..43c108bd6b51d293e0f8b1b5393c76c5d167ccef 100644
 --- a/content/browser/renderer_host/render_view_host_impl.cc
 +++ b/content/browser/renderer_host/render_view_host_impl.cc
-@@ -755,6 +755,11 @@ void RenderViewHostImpl::SetBackgroundOpaque(bool opaque) {
+@@ -765,6 +765,11 @@ void RenderViewHostImpl::SetBackgroundOpaque(bool opaque) {
    GetWidget()->GetAssociatedFrameWidget()->SetBackgroundOpaque(opaque);
  }
  
@@ -51,7 +51,7 @@ index 5fb8a3dc69dc5fc5bfa08e01d8f03707a23c9274..41774b60b8cb7e0a22cedc597dc07ad1
    void SendRendererPreferencesToRenderer(
        const blink::RendererPreferences& preferences);
 diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
-index c25e9ec643e715f4545f44ca1ed827b5a6cf7d96..ee083e550adf7533531ebf2834e400a84e692c41 100644
+index 1a79ccf14ba53eabf4915e4a0aee1f7e0fdcc9f8..dd7347996d3e4dcf2ba27258b771e705d31384b6 100644
 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc
 +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
 @@ -579,8 +579,8 @@ void RenderWidgetHostViewAura::ShowImpl(PageVisibilityState page_visibility) {

+ 3 - 3
patches/chromium/blink_local_frame.patch

@@ -49,10 +49,10 @@ index e662d4d61595735a30d5c721147a95698d4da3d9..6a0388aad469422dd1c0c2164f8aa858
    // its owning reference back to our owning LocalFrame.
    client_->Detached(type);
 diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
-index ac54c9ef09fe7a4a94737e76aa186ce6bd4f1f21..79ec1e2b1274160cca97d14a69c36eac4bc36b0f 100644
+index 401679f818e7bba02be454f9aa3424e84d36c4af..4da759d7ab6d6fb6b6d4d1648da0e62d7629ad5c 100644
 --- a/third_party/blink/renderer/core/frame/local_frame.cc
 +++ b/third_party/blink/renderer/core/frame/local_frame.cc
-@@ -748,10 +748,6 @@ bool LocalFrame::DetachImpl(FrameDetachType type) {
+@@ -746,10 +746,6 @@ bool LocalFrame::DetachImpl(FrameDetachType type) {
    }
    DCHECK(!view_ || !view_->IsAttached());
  
@@ -63,7 +63,7 @@ index ac54c9ef09fe7a4a94737e76aa186ce6bd4f1f21..79ec1e2b1274160cca97d14a69c36eac
    if (!Client())
      return false;
  
-@@ -805,6 +801,11 @@ bool LocalFrame::DetachImpl(FrameDetachType type) {
+@@ -803,6 +799,11 @@ bool LocalFrame::DetachImpl(FrameDetachType type) {
    DCHECK(!view_->IsAttached());
    Client()->WillBeDetached();
  

+ 7 - 7
patches/chromium/build_do_not_depend_on_packed_resource_integrity.patch

@@ -11,7 +11,7 @@ if we ever align our .pak file generation with Chrome we can remove this
 patch.
 
 diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
-index 1da9a118fedc612dfed638abba54e69b983d9185..f76f04f25307c9d49edf7462c16e0e04f64109aa 100644
+index 3973c5f5889b987410c116ac0f75b29df979d5b2..1215b1ea6c98e5dd9c661e392ef564626629cad5 100644
 --- a/chrome/BUILD.gn
 +++ b/chrome/BUILD.gn
 @@ -196,11 +196,16 @@ if (!is_android && !is_mac) {
@@ -33,10 +33,10 @@ index 1da9a118fedc612dfed638abba54e69b983d9185..f76f04f25307c9d49edf7462c16e0e04
          "//base",
          "//build:branding_buildflags",
 diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
-index 9f293f4ddd146e183e50ad3a99f464c10d2aaab5..9de2b989244cdf2966004b40118ea1b13d3be7b0 100644
+index 78103d77874650347f367818488a6845c6230e72..4124318730e8e686e968dcfc97af197e7f0e47e0 100644
 --- a/chrome/browser/BUILD.gn
 +++ b/chrome/browser/BUILD.gn
-@@ -4527,7 +4527,7 @@ static_library("browser") {
+@@ -4542,7 +4542,7 @@ static_library("browser") {
            [ "//chrome/browser/ui/webui/signin:profile_impl" ]
      }
  
@@ -46,10 +46,10 @@ index 9f293f4ddd146e183e50ad3a99f464c10d2aaab5..9de2b989244cdf2966004b40118ea1b1
        # than here in :chrome_dll.
        deps += [ "//chrome:packed_resources_integrity_header" ]
 diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
-index c3394f059fa284ebcfd3597951343b2e375c72f3..65576f0ba3335f8ede68037bf1a490f64ea495d7 100644
+index d3ecec0092f76a25a74d3d3255d5e6aaa4415106..2197307d6bdf07daaf397890e63a9e7c27d53254 100644
 --- a/chrome/test/BUILD.gn
 +++ b/chrome/test/BUILD.gn
-@@ -7000,9 +7000,12 @@ test("unit_tests") {
+@@ -7007,9 +7007,12 @@ test("unit_tests") {
        "//chrome/notification_helper",
      ]
  
@@ -63,7 +63,7 @@ index c3394f059fa284ebcfd3597951343b2e375c72f3..65576f0ba3335f8ede68037bf1a490f6
        "//chrome//services/util_win:unit_tests",
        "//chrome/app:chrome_dll_resources",
        "//chrome/app:win_unit_tests",
-@@ -7960,6 +7963,10 @@ test("unit_tests") {
+@@ -7968,6 +7971,10 @@ test("unit_tests") {
        "../browser/performance_manager/policies/background_tab_loading_policy_unittest.cc",
      ]
  
@@ -74,7 +74,7 @@ index c3394f059fa284ebcfd3597951343b2e375c72f3..65576f0ba3335f8ede68037bf1a490f6
      sources += [
        # The importer code is not used on Android.
        "../common/importer/firefox_importer_utils_unittest.cc",
-@@ -8020,7 +8027,6 @@ test("unit_tests") {
+@@ -8023,7 +8030,6 @@ test("unit_tests") {
      # Non-android deps for "unit_tests" target.
      deps += [
        "../browser/screen_ai:screen_ai_install_state",

+ 1 - 1
patches/chromium/build_gn.patch

@@ -7,7 +7,7 @@ These are variables we add to the root BUILDCONFIG so that they're available
 everywhere, without having to import("//electron/.../flags.gni").
 
 diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn
-index c01896919e5a4549bd5e1d2d8d54f69fcb2b8aa6..3c032756188714f68828060e693e5db96a4b5bba 100644
+index c2212c73c1f54bdfb0510bb94ddf7a58f6e54242..c9780b914f2169488a99932073ea245311bb158c 100644
 --- a/build/config/BUILDCONFIG.gn
 +++ b/build/config/BUILDCONFIG.gn
 @@ -123,6 +123,9 @@ if (current_os == "") {

+ 4 - 4
patches/chromium/build_libc_as_static_library.patch

@@ -7,10 +7,10 @@ Build libc++ as static library to compile and pass
 nan tests
 
 diff --git a/buildtools/third_party/libc++/BUILD.gn b/buildtools/third_party/libc++/BUILD.gn
-index 5c366d2dded04400a3d9c2cb9c31bdfd286e7246..90902df8843858cd8db547d38ee4f58f0dad722c 100644
+index 3ae561bd6627329ece5e29eda845c5dc61fcb77e..aa1ae438f9742808f775a13ff1bb37c33738e0bc 100644
 --- a/buildtools/third_party/libc++/BUILD.gn
 +++ b/buildtools/third_party/libc++/BUILD.gn
-@@ -48,7 +48,11 @@ config("winver") {
+@@ -192,7 +192,11 @@ libcxx_modules("std_wctype_h") {
  if (libcxx_is_shared) {
    _libcxx_target_type = "shared_library"
  } else {
@@ -21,9 +21,9 @@ index 5c366d2dded04400a3d9c2cb9c31bdfd286e7246..90902df8843858cd8db547d38ee4f58f
 +    _libcxx_target_type = "static_library"
 +  }
  }
+ 
  target(_libcxx_target_type, "libc++") {
-   # Most things that need to depend on libc++ should do so via the implicit
-@@ -56,6 +60,7 @@ target(_libcxx_target_type, "libc++") {
+@@ -201,6 +205,7 @@ target(_libcxx_target_type, "libc++") {
    # need to explicitly depend on libc++.
    visibility = [
      "//build/config:common_deps",

+ 7 - 7
patches/chromium/can_create_window.patch

@@ -9,10 +9,10 @@ potentially prevent a window from being created.
 TODO(loc): this patch is currently broken.
 
 diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
-index 339bc872c7bb179090cac4391a90f86d6303ce43..a60d567f805ca44dd000527b3bc0c47b163503b7 100644
+index f0089dddae47d970a04acc0df2fb0e2bdffc4856..33088669c478d5b7f6bbaa7998e14479e539c5cc 100644
 --- a/content/browser/renderer_host/render_frame_host_impl.cc
 +++ b/content/browser/renderer_host/render_frame_host_impl.cc
-@@ -9582,6 +9582,7 @@ void RenderFrameHostImpl::CreateNewWindow(
+@@ -9601,6 +9601,7 @@ void RenderFrameHostImpl::CreateNewWindow(
            last_committed_origin_, params->window_container_type,
            params->target_url, params->referrer.To<Referrer>(),
            params->frame_name, params->disposition, *params->features,
@@ -21,7 +21,7 @@ index 339bc872c7bb179090cac4391a90f86d6303ce43..a60d567f805ca44dd000527b3bc0c47b
            &no_javascript_access);
  
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
-index 5ff43afce429c2445517b305bc18975a031e52ae..170e5700311f8f03950bd3b5f6eb2c013bdce3c3 100644
+index f9f64fefddb0c7259877f7d39100fb9caee328b7..104e06b584e9321bc1da4c0913fd36e6cee909ee 100644
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
 @@ -5003,6 +5003,12 @@ FrameTree* WebContentsImpl::CreateNewWindow(
@@ -148,10 +148,10 @@ index fbd5d3275fb9dfb04bee078b5ef275926fdad926..3938045d8028abff5f44ad347b514e4f
    // typically happens when popups are created.
    virtual void WebContentsCreated(WebContents* source_contents,
 diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
-index 25fe6dddeea88878cf17dc945aa245cf3fcdc368..256275528ddbdbc22736e73e43d385d9cdfca264 100644
+index 5d9ad1b7d5dfce78ce411a7670d4b20f35747b88..51d32ef662315d4a9dcc544093dd1d5e93d39c6f 100644
 --- a/content/renderer/render_frame_impl.cc
 +++ b/content/renderer/render_frame_impl.cc
-@@ -6892,6 +6892,10 @@ WebView* RenderFrameImpl::CreateNewWindow(
+@@ -6893,6 +6893,10 @@ WebView* RenderFrameImpl::CreateNewWindow(
            request.HasUserGesture(), GetWebFrame()->IsAdFrame(),
            GetWebFrame()->IsAdScriptInStack());
  
@@ -210,10 +210,10 @@ index 82e9d3dfb5f7da76d89fe15ae61d379fa46e177d..fd035512099a54dff6cc951a2226c23a
  
  }  // namespace blink
 diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc
-index 160c43f32c88cf81fa75ec1047579d5aef6e34c5..25307da79dfaa828971e537d99968132ee04a0f4 100644
+index 3fa7cfabb084914d4fe9c65a17daacb6e274a40d..ca4bc6cd7060da4bdff70e896bb824a3d75f9dea 100644
 --- a/third_party/blink/renderer/core/frame/local_dom_window.cc
 +++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
-@@ -2266,6 +2266,8 @@ DOMWindow* LocalDOMWindow::open(v8::Isolate* isolate,
+@@ -2269,6 +2269,8 @@ DOMWindow* LocalDOMWindow::open(v8::Isolate* isolate,
    WebWindowFeatures window_features =
        GetWindowFeaturesFromString(features, entered_window);
  

+ 0 - 71
patches/chromium/cherry-pick-dd8e2822e507.patch

@@ -1,71 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Patrick Meenan <[email protected]>
-Date: Thu, 6 Feb 2025 07:41:40 -0800
-Subject: Set is_web_secure_context when initializing Service Worker from disk
-
-The value of is_web_secure_context is not serialized to disk when
-storing the service worker registration (only a few select policies
-are).
-
-When instantiating the policy container for an already-registered
-worker, it uses the default value (false) which is wrong.
-
-Since Service Workers are guaranteed to ALWAYS be a web secure
-context, this change explicitly sets it to true when restoring a
-serialized policy.
-
-See: https://w3c.github.io/webappsec-secure-contexts/#examples-service-workers
-
-Bug: 387258077,383070811
-Change-Id: I75efe895662ab4e6d68cacace6d05e004c5dfd33
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6236205
-Reviewed-by: Hiroki Nakagawa <[email protected]>
-Reviewed-by: Dave Tapuska <[email protected]>
-Commit-Queue: Patrick Meenan <[email protected]>
-Cr-Commit-Position: refs/heads/main@{#1416795}
-
-diff --git a/content/browser/renderer_host/policy_container_host.cc b/content/browser/renderer_host/policy_container_host.cc
-index 5f62b1a274bab7028beb9836f88805e7b5a83e2c..f16f56d8d5f0c4e9bc164c546eee8c28f6856693 100644
---- a/content/browser/renderer_host/policy_container_host.cc
-+++ b/content/browser/renderer_host/policy_container_host.cc
-@@ -136,9 +136,11 @@ PolicyContainerPolicies::PolicyContainerPolicies(
-       allow_cross_origin_isolation(allow_cross_origin_isolation) {}
- 
- PolicyContainerPolicies::PolicyContainerPolicies(
--    const blink::mojom::PolicyContainerPolicies& policies)
-+    const blink::mojom::PolicyContainerPolicies& policies,
-+    bool is_web_secure_context)
-     : referrer_policy(policies.referrer_policy),
-       ip_address_space(policies.ip_address_space),
-+      is_web_secure_context(is_web_secure_context),
-       content_security_policies(
-           mojo::Clone(policies.content_security_policies)),
-       cross_origin_embedder_policy(policies.cross_origin_embedder_policy),
-diff --git a/content/browser/renderer_host/policy_container_host.h b/content/browser/renderer_host/policy_container_host.h
-index 394bd53bb5c1dfea5abe24b9047eb190884c2648..7add42348ef28079196b447feda78210815d1551 100644
---- a/content/browser/renderer_host/policy_container_host.h
-+++ b/content/browser/renderer_host/policy_container_host.h
-@@ -49,7 +49,8 @@ struct CONTENT_EXPORT PolicyContainerPolicies {
-       bool allow_cross_origin_isolation);
- 
-   explicit PolicyContainerPolicies(
--      const blink::mojom::PolicyContainerPolicies& policies);
-+      const blink::mojom::PolicyContainerPolicies& policies,
-+      bool is_web_secure_context);
- 
-   // Used when loading workers from network schemes.
-   // WARNING: This does not populate referrer policy.
-diff --git a/content/browser/service_worker/service_worker_registry.cc b/content/browser/service_worker/service_worker_registry.cc
-index aa1e8fb5d1b3eef93b799f29cc89e15315507d2d..68b5c2ba114aa084c5ad6bc2e4fd12d44393ed77 100644
---- a/content/browser/service_worker/service_worker_registry.cc
-+++ b/content/browser/service_worker/service_worker_registry.cc
-@@ -1084,7 +1084,8 @@ ServiceWorkerRegistry::GetOrCreateRegistration(
-     if (data.policy_container_policies) {
-       version->set_policy_container_host(
-           base::MakeRefCounted<PolicyContainerHost>(
--              PolicyContainerPolicies(*data.policy_container_policies)));
-+              PolicyContainerPolicies(*data.policy_container_policies,
-+                                      /*is_web_secure_context=*/true)));
-     }
-     if (data.router_rules) {
-       auto error = version->SetupRouterEvaluator(*data.router_rules);

+ 2 - 2
patches/chromium/chore_add_electron_deps_to_gitignores.patch

@@ -6,10 +6,10 @@ Subject: chore: add electron deps to gitignores
 Makes things like "git status" quicker when developing electron locally
 
 diff --git a/.gitignore b/.gitignore
-index 9056030523807b8023493c0be9c9675da792852e..a1b949528e0a164c1bad98dbfbef282fb152161a 100644
+index de216e464df8b332b932ce4e77f8a918ce77e9c2..bc0f7e677ca597b25e7664698117443cc78ffc38 100644
 --- a/.gitignore
 +++ b/.gitignore
-@@ -216,6 +216,7 @@ vs-chromium-project.txt
+@@ -217,6 +217,7 @@ vs-chromium-project.txt
  /data
  /delegate_execute
  /device/serial/device_serial_mojo.xml

+ 4 - 4
patches/chromium/chore_introduce_blocking_api_for_electron.patch

@@ -7,7 +7,7 @@ This patch comes after Chromium removed the ScopedAllowIO API in favor
 of explicitly adding ScopedAllowBlocking calls as friends.
 
 diff --git a/base/threading/thread_restrictions.h b/base/threading/thread_restrictions.h
-index ab355bfa81e995e31aa0decf68e1275c9bd69657..eeb7abb38725e06cbd8404653ab792b2f6a5be95 100644
+index 56ddbc2d4fa336bcdbe9aaacd4bf8bbaa3573239..7859ce547dc00c2842fe1aa3699cf20e0f597937 100644
 --- a/base/threading/thread_restrictions.h
 +++ b/base/threading/thread_restrictions.h
 @@ -132,6 +132,7 @@ class KeyStorageLinux;
@@ -18,7 +18,7 @@ index ab355bfa81e995e31aa0decf68e1275c9bd69657..eeb7abb38725e06cbd8404653ab792b2
  class Profile;
  class ProfileImpl;
  class ScopedAllowBlockingForProfile;
-@@ -281,6 +282,9 @@ class BackendImpl;
+@@ -278,6 +279,9 @@ class BackendImpl;
  class InFlightIO;
  bool CleanupDirectorySync(const base::FilePath&);
  }  // namespace disk_cache
@@ -28,7 +28,7 @@ index ab355bfa81e995e31aa0decf68e1275c9bd69657..eeb7abb38725e06cbd8404653ab792b2
  namespace enterprise_connectors {
  class LinuxKeyRotationCommand;
  }  // namespace enterprise_connectors
-@@ -578,6 +582,7 @@ class BASE_EXPORT ScopedAllowBlocking {
+@@ -575,6 +579,7 @@ class BASE_EXPORT ScopedAllowBlocking {
    friend class ::DesktopNotificationBalloon;
    friend class ::FirefoxProfileLock;
    friend class ::GaiaConfig;
@@ -36,7 +36,7 @@ index ab355bfa81e995e31aa0decf68e1275c9bd69657..eeb7abb38725e06cbd8404653ab792b2
    friend class ::ProfileImpl;
    friend class ::ScopedAllowBlockingForProfile;
    friend class ::StartupTabProviderImpl;
-@@ -619,6 +624,7 @@ class BASE_EXPORT ScopedAllowBlocking {
+@@ -615,6 +620,7 @@ class BASE_EXPORT ScopedAllowBlocking {
    friend class crypto::ScopedAllowBlockingForNSS;  // http://crbug.com/59847
    friend class drive::FakeDriveService;
    friend class extensions::DesktopAndroidExtensionSystem;

+ 1 - 1
patches/chromium/chore_partial_revert_of.patch

@@ -14,7 +14,7 @@ track down the source of this problem & figure out if we can fix it
 by changing something in Electron.
 
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
-index e7f78b970f433a232cbcb172904d0ab993c5ac6a..62a4a28afb27c802ce24dd10d941e77cfbca0b02 100644
+index 0346d081467f0728183f55b0d088325d776e6290..43476fbb3621ac3a1ca61bed9c5115443f6e255d 100644
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
 @@ -4922,7 +4922,7 @@ FrameTree* WebContentsImpl::CreateNewWindow(

+ 2 - 2
patches/chromium/chore_patch_out_partition_attribute_dcheck_for_webviews.patch

@@ -14,10 +14,10 @@ This change patches it out to prevent the DCHECK.
 It can be removed once/if we see a better solution to the problem.
 
 diff --git a/content/browser/site_instance_impl.cc b/content/browser/site_instance_impl.cc
-index e94348bfb40a6a4fdf67ec92b67bbc86af5fdab0..8e7e8f1841053e8e6f4b419313c78c055891a23a 100644
+index 66c3eaa6977bb59cec16ad31d650fbaa4581e76c..27ac20158a93a1f128a6b0184c36e9130193708f 100644
 --- a/content/browser/site_instance_impl.cc
 +++ b/content/browser/site_instance_impl.cc
-@@ -228,7 +228,7 @@ scoped_refptr<SiteInstanceImpl> SiteInstanceImpl::CreateForGuest(
+@@ -229,7 +229,7 @@ scoped_refptr<SiteInstanceImpl> SiteInstanceImpl::CreateForGuest(
      BrowserContext* browser_context,
      const StoragePartitionConfig& partition_config) {
    DCHECK(browser_context);

+ 7 - 7
patches/chromium/chore_provide_iswebcontentscreationoverridden_with_full_params.patch

@@ -80,10 +80,10 @@ index 4fd8dff1089cd6afa6a66dc185734d7671657281..0a1f4268ea771a3d5d4a2668928c6e5d
        content::WebContents* source,
        const content::OpenURLParams& params,
 diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
-index 3d0ffcbb38c234b97fe8df33e34eab5386bd59b8..0ac03ba26534494f963238672c1aa253e4a601e8 100644
+index ac52887ba23d3024db9b0b326eaa350c24f3e2a6..fa692bee467ea888914ebc6dafb6f6178b3eb73d 100644
 --- a/chrome/browser/ui/browser.cc
 +++ b/chrome/browser/ui/browser.cc
-@@ -2210,12 +2210,11 @@ bool Browser::IsWebContentsCreationOverridden(
+@@ -2212,12 +2212,11 @@ bool Browser::IsWebContentsCreationOverridden(
      content::SiteInstance* source_site_instance,
      content::mojom::WindowContainerType window_container_type,
      const GURL& opener_url,
@@ -99,10 +99,10 @@ index 3d0ffcbb38c234b97fe8df33e34eab5386bd59b8..0ac03ba26534494f963238672c1aa253
  
  WebContents* Browser::CreateCustomWebContents(
 diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h
-index fa28d4500e08dcd595b6240daca6a902ee924002..e20d787445aa5106ff349f433434622a3210c8e8 100644
+index 23066b006559fccdfc556d2097fab7e2b08f185c..b1348af15c6fb246ae10520597e3655c7352e368 100644
 --- a/chrome/browser/ui/browser.h
 +++ b/chrome/browser/ui/browser.h
-@@ -975,8 +975,7 @@ class Browser : public TabStripModelObserver,
+@@ -977,8 +977,7 @@ class Browser : public TabStripModelObserver,
        content::SiteInstance* source_site_instance,
        content::mojom::WindowContainerType window_container_type,
        const GURL& opener_url,
@@ -218,7 +218,7 @@ index c6838c83ef971b88769b1f3fba8095025ae25464..2da6a4e08340e72ba7de5d03444c2f17
    content::WebContents* AddNewContents(
        content::WebContents* source,
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
-index 6befbf14c4a95e37a3423be7743655e2fc365a77..f943c010b449dd5d941da4f61da3a01ba5e49a8b 100644
+index bb132ec61070beaae27d583282bc3e9f34f5357b..90ac881d8e9f534c875b5eb259b06ef1db1c71d3 100644
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
 @@ -4885,8 +4885,7 @@ FrameTree* WebContentsImpl::CreateNewWindow(
@@ -380,10 +380,10 @@ index 1012a909ef1fcae51c218ae519fe7e0db65ab087..127b1ae940bc9313aecb635e2b01bb6f
                            int opener_render_process_id,
                            int opener_render_frame_id,
 diff --git a/headless/lib/browser/headless_web_contents_impl.cc b/headless/lib/browser/headless_web_contents_impl.cc
-index 0101dbe4aa8cfe3103ba6ca9c9ac62ee46cffb2d..87b7cb41635c47a3ff7d19a7b46f63ed576be33d 100644
+index 62be493c74423875af45a92c98b2ffceb928189f..ec82d8e47bf0a33f832b8ca242f395fe59a1bbee 100644
 --- a/headless/lib/browser/headless_web_contents_impl.cc
 +++ b/headless/lib/browser/headless_web_contents_impl.cc
-@@ -207,8 +207,7 @@ class HeadlessWebContentsImpl::Delegate : public content::WebContentsDelegate {
+@@ -206,8 +206,7 @@ class HeadlessWebContentsImpl::Delegate : public content::WebContentsDelegate {
        content::SiteInstance* source_site_instance,
        content::mojom::WindowContainerType window_container_type,
        const GURL& opener_url,

+ 4 - 4
patches/chromium/create_browser_v8_snapshot_file_name_fuse.patch

@@ -7,10 +7,10 @@ By default, chromium sets up one v8 snapshot to be used in all v8 contexts. This
 to have a dedicated browser process v8 snapshot defined by the file `browser_v8_context_snapshot.bin`.
 
 diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
-index 7142484a2afd4c3cef4cac613c5f68e3c52e8eab..0fcc5e54df1993d04c060be23815d991b6c51286 100644
+index 08fa1ff278c0b6b2f804d79234898b90f3d29b29..0874ec4e05f55e5a80aad064b221459b007a16f6 100644
 --- a/content/app/content_main_runner_impl.cc
 +++ b/content/app/content_main_runner_impl.cc
-@@ -269,8 +269,13 @@ void AsanProcessInfoCB(const char*, bool*) {
+@@ -271,8 +271,13 @@ void AsanProcessInfoCB(const char*, bool*) {
  }
  #endif  // defined(ADDRESS_SANITIZER)
  
@@ -25,7 +25,7 @@ index 7142484a2afd4c3cef4cac613c5f68e3c52e8eab..0fcc5e54df1993d04c060be23815d991
  #if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC)
    base::FileDescriptorStore& file_descriptor_store =
        base::FileDescriptorStore::GetInstance();
-@@ -299,11 +304,12 @@ bool ShouldLoadV8Snapshot(const base::CommandLine& command_line,
+@@ -301,11 +306,12 @@ bool ShouldLoadV8Snapshot(const base::CommandLine& command_line,
  
  #endif  // V8_USE_EXTERNAL_STARTUP_DATA
  
@@ -40,7 +40,7 @@ index 7142484a2afd4c3cef4cac613c5f68e3c52e8eab..0fcc5e54df1993d04c060be23815d991
  #endif  // V8_USE_EXTERNAL_STARTUP_DATA
  }
  
-@@ -972,7 +978,7 @@ int ContentMainRunnerImpl::Initialize(ContentMainParams params) {
+@@ -978,7 +984,7 @@ int ContentMainRunnerImpl::Initialize(ContentMainParams params) {
      return TerminateForFatalInitializationError();
  #endif  // BUILDFLAG(IS_ANDROID) && (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE)
  

+ 16 - 11
patches/chromium/desktop_media_list.patch

@@ -82,19 +82,24 @@ index 786c526588d81b8b5b1b5dd3760719a53e005995..f66b7d0b4dfcbb8ed3dde5a9ff463ae2
    const Source& GetSource(int index) const override;
    DesktopMediaList::Type GetMediaListType() const override;
 diff --git a/chrome/browser/media/webrtc/native_desktop_media_list.cc b/chrome/browser/media/webrtc/native_desktop_media_list.cc
-index 0827764fdeb59d339f304a20e53b01bb158104ee..3192a5b087bf88c57b77440455ae8d62edd58137 100644
+index b1d9cc5b8897b0b6d153b0b4813c8a6eca42664e..c85ea4f9a9b5ec9a669196f4e8d1010457bf38f0 100644
 --- a/chrome/browser/media/webrtc/native_desktop_media_list.cc
 +++ b/chrome/browser/media/webrtc/native_desktop_media_list.cc
-@@ -176,7 +176,7 @@ BOOL CALLBACK AllHwndCollector(HWND hwnd, LPARAM param) {
- #if BUILDFLAG(IS_MAC)
- BASE_FEATURE(kWindowCaptureMacV2,
-              "WindowCaptureMacV2",
--             base::FEATURE_ENABLED_BY_DEFAULT);
-+             base::FEATURE_DISABLED_BY_DEFAULT);
+@@ -233,9 +233,13 @@ content::DesktopMediaID::Id GetUpdatedWindowId(
+     }
+   }
+ #elif BUILDFLAG(IS_MAC)
++#if 0
++  // Should be re-enabled when addressing
++  // https://github.com/electron/electron/issues/30682
+   if (remote_cocoa::ScopedCGWindowID::Get(desktop_media_id.id)) {
+     window_id = desktop_media_id.id;
+   }
++#endif
  #endif
  
- content::DesktopMediaID::Type ConvertToDesktopMediaIDType(
-@@ -363,7 +363,7 @@ class NativeDesktopMediaList::Worker
+   return window_id;
+@@ -338,7 +342,7 @@ class NativeDesktopMediaList::Worker
    base::WeakPtr<NativeDesktopMediaList> media_list_;
  
    DesktopMediaID::Type source_type_;
@@ -103,7 +108,7 @@ index 0827764fdeb59d339f304a20e53b01bb158104ee..3192a5b087bf88c57b77440455ae8d62
    const ThumbnailCapturer::FrameDeliveryMethod frame_delivery_method_;
    const bool add_current_process_windows_;
    const bool auto_show_delegated_source_list_;
-@@ -654,6 +654,12 @@ void NativeDesktopMediaList::Worker::RefreshNextThumbnail() {
+@@ -628,6 +632,12 @@ void NativeDesktopMediaList::Worker::RefreshNextThumbnail() {
        FROM_HERE,
        base::BindOnce(&NativeDesktopMediaList::UpdateNativeThumbnailsFinished,
                       media_list_));
@@ -116,7 +121,7 @@ index 0827764fdeb59d339f304a20e53b01bb158104ee..3192a5b087bf88c57b77440455ae8d62
  }
  
  void NativeDesktopMediaList::Worker::OnCaptureResult(
-@@ -1061,6 +1067,11 @@ void NativeDesktopMediaList::RefreshForVizFrameSinkWindows(
+@@ -1035,6 +1045,11 @@ void NativeDesktopMediaList::RefreshForVizFrameSinkWindows(
          FROM_HERE, base::BindOnce(&Worker::RefreshThumbnails,
                                    base::Unretained(worker_.get()),
                                    std::move(native_ids), thumbnail_size_));

+ 1 - 1
patches/chromium/disable_compositor_recycling.patch

@@ -6,7 +6,7 @@ Subject: fix: disabling compositor recycling
 Compositor recycling is useful for Chrome because there can be many tabs and spinning up a compositor for each one would be costly. In practice, Chrome uses the parent compositor code path of browser_compositor_view_mac.mm; the NSView of each tab is detached when it's hidden and attached when it's shown. For Electron, there is no parent compositor, so we're forced into the "own compositor" code path, which seems to be non-optimal and pretty ruthless in terms of the release of resources. Electron has no real concept of multiple tabs per window, so it should be okay to disable this ruthless recycling altogether in Electron.
 
 diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
-index 86886e94e9e2c52e297a82175f6071852e792148..bac05714537680f163d1a30a5fe9523a469abe6d 100644
+index efa697b7c4d428200d14e436ab062c13273916f4..48a6a7e35daf565d727d02cd874f2052eb3c1e3e 100644
 --- a/content/browser/renderer_host/render_widget_host_view_mac.mm
 +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
 @@ -559,7 +559,11 @@

+ 2 - 2
patches/chromium/disable_freezing_flags_after_init_in_node.patch

@@ -15,10 +15,10 @@ at some point be an API to "unfreeze" the flags, or we may be able to refactor
 node initialization to not update flags after V8 initialization.
 
 diff --git a/content/renderer/render_process_impl.cc b/content/renderer/render_process_impl.cc
-index 765de13f8cc30229e1711e2c0a225efdbcc4251f..328c8026c9010e1e704bd0ef146a8ec1128e7241 100644
+index eb11068e932b7b94cbf215d6f84ae427ce77fcd5..9744e45974af215bfbe9e5feb2db7274f8efebf0 100644
 --- a/content/renderer/render_process_impl.cc
 +++ b/content/renderer/render_process_impl.cc
-@@ -212,6 +212,9 @@ RenderProcessImpl::RenderProcessImpl()
+@@ -208,6 +208,9 @@ RenderProcessImpl::RenderProcessImpl()
      v8::V8::SetFlagsFromString(kSABPerContextFlag, sizeof(kSABPerContextFlag));
    }
  

+ 5 - 5
patches/chromium/disable_hidden.patch

@@ -6,10 +6,10 @@ Subject: disable_hidden.patch
 Electron uses this to disable background throttling for hidden windows.
 
 diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
-index 130fb82767d534988c51b4e60244f7c73b3ba770..88d8676fe67a61dfe4c3bfad0a94225d4cae81d3 100644
+index d5537feb9b4b6cc24d0ed226e0e02b9c288efe26..6bf8d9100658d406bae3d5f346c7c904ea9a3874 100644
 --- a/content/browser/renderer_host/render_widget_host_impl.cc
 +++ b/content/browser/renderer_host/render_widget_host_impl.cc
-@@ -799,6 +799,10 @@ void RenderWidgetHostImpl::WasHidden() {
+@@ -823,6 +823,10 @@ void RenderWidgetHostImpl::WasHidden() {
      return;
    }
  
@@ -21,10 +21,10 @@ index 130fb82767d534988c51b4e60244f7c73b3ba770..88d8676fe67a61dfe4c3bfad0a94225d
    // Prompts should remain open and functional across tab switches.
    if (!delegate_->IsWaitingForPointerLockPrompt(this)) {
 diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
-index 286e3d89a6c241b1243908db4b26b66726e197e8..1d617f9c0be6ec770c778d6749ecceb53cac2821 100644
+index 4420f3a141d8c66eedf387e28350344b9a6c2525..990881ea27f1720ce956cc1d6671b1061d70a45e 100644
 --- a/content/browser/renderer_host/render_widget_host_impl.h
 +++ b/content/browser/renderer_host/render_widget_host_impl.h
-@@ -1009,6 +1009,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl
+@@ -1012,6 +1012,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl
    // Requests a commit and forced redraw in the renderer compositor.
    void ForceRedrawForTesting();
  
@@ -35,7 +35,7 @@ index 286e3d89a6c241b1243908db4b26b66726e197e8..1d617f9c0be6ec770c778d6749ecceb5
    // |routing_id| must not be MSG_ROUTING_NONE.
    // If this object outlives |delegate|, DetachDelegate() must be called when
 diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
-index 612d67d06d766d7ff2f923175c65f24480b87f42..c25e9ec643e715f4545f44ca1ed827b5a6cf7d96 100644
+index 48e8a414e0b7156dd002766175a2a5bb3ee71bb3..1a79ccf14ba53eabf4915e4a0aee1f7e0fdcc9f8 100644
 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc
 +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
 @@ -643,7 +643,7 @@ void RenderWidgetHostViewAura::HideImpl() {

+ 1 - 1
patches/chromium/expose_setuseragent_on_networkcontext.patch

@@ -33,7 +33,7 @@ index 0ab8187b0db8ae6db46d81738f653a2bc4c566f6..de3d55e85c22317f7f9375eb94d0d5d4
  
  }  // namespace net
 diff --git a/services/network/network_context.cc b/services/network/network_context.cc
-index b7bdda9141ba4ea3c3ab391ec68dff14a4ac717b..3d32e7dcc85abd315bae38f2f0a6504dc0cffe86 100644
+index 014012457bbda884ae6c9eaf46deb7f41e203351..311529eb8b306a647ef56416d3859245acb05cef 100644
 --- a/services/network/network_context.cc
 +++ b/services/network/network_context.cc
 @@ -1795,6 +1795,13 @@ void NetworkContext::SetNetworkConditions(

+ 6 - 6
patches/chromium/feat_add_signals_when_embedder_cleanup_callbacks_run_for.patch

@@ -25,10 +25,10 @@ Refs https://issues.chromium.org/issues/40210365 which is blocked
 on https://issues.chromium.org/issues/42203693
 
 diff --git a/gin/isolate_holder.cc b/gin/isolate_holder.cc
-index 2be37976a1305f1deed561b3b829dbb5d7ae85e7..44eb16f17d272125e2b4a590f8962eb8144d9755 100644
+index d1b95149ea0d16af2606900f10898a355026ffe1..fe1d866cba3b1a221092e1d6dced027894b3f3af 100644
 --- a/gin/isolate_holder.cc
 +++ b/gin/isolate_holder.cc
-@@ -34,6 +34,8 @@ v8::ArrayBuffer::Allocator* g_array_buffer_allocator = nullptr;
+@@ -35,6 +35,8 @@ v8::ArrayBuffer::Allocator* g_array_buffer_allocator = nullptr;
  const intptr_t* g_reference_table = nullptr;
  v8::FatalErrorCallback g_fatal_error_callback = nullptr;
  v8::OOMErrorCallback g_oom_error_callback = nullptr;
@@ -37,7 +37,7 @@ index 2be37976a1305f1deed561b3b829dbb5d7ae85e7..44eb16f17d272125e2b4a590f8962eb8
  
  std::unique_ptr<v8::Isolate::CreateParams> getModifiedIsolateParams(
      std::unique_ptr<v8::Isolate::CreateParams> params,
-@@ -198,10 +200,26 @@ IsolateHolder::getDefaultIsolateParams() {
+@@ -205,10 +207,26 @@ IsolateHolder::getDefaultIsolateParams() {
    return params;
  }
  
@@ -65,10 +65,10 @@ index 2be37976a1305f1deed561b3b829dbb5d7ae85e7..44eb16f17d272125e2b4a590f8962eb8
 +
  }  // namespace gin
 diff --git a/gin/public/isolate_holder.h b/gin/public/isolate_holder.h
-index 52b8c1af58678b9fee684ff75340c98fcc73b552..f79407d741a30298d09efd53589f16dc9b26107f 100644
+index dc3a5b0678b9c686e241b492e2c3b5ac833611a3..32a7ba4f557e65d9525d2ca07e8597e7bd070b12 100644
 --- a/gin/public/isolate_holder.h
 +++ b/gin/public/isolate_holder.h
-@@ -131,6 +131,8 @@ class GIN_EXPORT IsolateHolder {
+@@ -132,6 +132,8 @@ class GIN_EXPORT IsolateHolder {
    // Should only be called after v8::IsolateHolder::Initialize() is invoked.
    static std::unique_ptr<v8::Isolate::CreateParams> getDefaultIsolateParams();
  
@@ -77,7 +77,7 @@ index 52b8c1af58678b9fee684ff75340c98fcc73b552..f79407d741a30298d09efd53589f16dc
    v8::Isolate* isolate() { return isolate_; }
  
    // This method returns if v8::Locker is needed to access isolate.
-@@ -144,6 +146,9 @@ class GIN_EXPORT IsolateHolder {
+@@ -145,6 +147,9 @@ class GIN_EXPORT IsolateHolder {
  
    void EnableIdleTasks(std::unique_ptr<V8IdleTaskRunner> idle_task_runner);
  

+ 5 - 5
patches/chromium/feat_add_streaming-protocol_registry_to_multibuffer_data_source.patch

@@ -13,11 +13,11 @@ other protocols to register their streaming behavior. MultibufferDataSource::Ass
 then refers to the list so that it can correctly determine the data source's settings.
 
 diff --git a/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc b/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc
-index 14b6e02f10cd3c9e666b23507355d42ffffa56f8..4542732d5fe1631d1f4eb519ecf9a0962f8f0565 100644
+index c19436994faa21246c8c2e53e96c7ce3fffede4f..31c2efe2acd8c11bb5a861fa42841fe0e76c1141 100644
 --- a/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc
 +++ b/third_party/blink/renderer/platform/media/multi_buffer_data_source.cc
-@@ -13,8 +13,10 @@
- #include "base/functional/callback_helpers.h"
+@@ -11,8 +11,10 @@
+ #include "base/containers/adapters.h"
  #include "base/location.h"
  #include "base/memory/raw_ptr.h"
 +#include "base/no_destructor.h"
@@ -27,7 +27,7 @@ index 14b6e02f10cd3c9e666b23507355d42ffffa56f8..4542732d5fe1631d1f4eb519ecf9a096
  #include "media/base/media_log.h"
  #include "net/base/net_errors.h"
  #include "third_party/blink/renderer/platform/media/buffered_data_source_host_impl.h"
-@@ -63,8 +65,20 @@ const int kUpdateBufferSizeFrequency = 32;
+@@ -67,8 +69,20 @@ const int kUpdateBufferSizeFrequency = 32;
  // How long to we delay a seek after a read?
  constexpr base::TimeDelta kSeekDelay = base::Milliseconds(20);
  
@@ -48,7 +48,7 @@ index 14b6e02f10cd3c9e666b23507355d42ffffa56f8..4542732d5fe1631d1f4eb519ecf9a096
  class MultiBufferDataSource::ReadOperation {
   public:
    ReadOperation() = delete;
-@@ -156,7 +170,14 @@ bool MultiBufferDataSource::media_has_played() const {
+@@ -160,7 +174,14 @@ bool MultiBufferDataSource::media_has_played() const {
  
  bool MultiBufferDataSource::AssumeFullyBuffered() const {
    DCHECK(url_data_);

+ 10 - 10
patches/chromium/feat_add_support_for_missing_dialog_features_to_shell_dialogs.patch

@@ -345,10 +345,10 @@ index 9d45ec49a4fb5e12407b65b83c1ba0c13cd0dfd8..400cce91b020ecd5e48566f125515d2c
 +
  }  // namespace ui
 diff --git a/ui/shell_dialogs/select_file_dialog_linux_portal.cc b/ui/shell_dialogs/select_file_dialog_linux_portal.cc
-index b6a116654ef6815e3d97dd9302d2a9930877dda8..20ebcdd46bd1570ad671c661e7f866ea0396a49e 100644
+index b23d357d4e21f10be82f0ea37b1ec3e959fc2c0b..d29de35ac813cc68b1faa11e803ace9a78df74ba 100644
 --- a/ui/shell_dialogs/select_file_dialog_linux_portal.cc
 +++ b/ui/shell_dialogs/select_file_dialog_linux_portal.cc
-@@ -7,6 +7,7 @@
+@@ -12,6 +12,7 @@
  #include <string_view>
  
  #include "base/check.h"
@@ -356,7 +356,7 @@ index b6a116654ef6815e3d97dd9302d2a9930877dda8..20ebcdd46bd1570ad671c661e7f866ea
  #include "base/files/file_util.h"
  #include "base/functional/bind.h"
  #include "base/logging.h"
-@@ -40,6 +41,8 @@ namespace {
+@@ -45,6 +46,8 @@ namespace {
  constexpr char kXdgPortalService[] = "org.freedesktop.portal.Desktop";
  constexpr char kXdgPortalObject[] = "/org/freedesktop/portal/desktop";
  
@@ -365,7 +365,7 @@ index b6a116654ef6815e3d97dd9302d2a9930877dda8..20ebcdd46bd1570ad671c661e7f866ea
  constexpr int kXdgPortalRequiredVersion = 3;
  
  constexpr char kFileChooserInterfaceName[] =
-@@ -61,6 +64,8 @@ constexpr uint32_t kFileChooserFilterKindGlob = 0;
+@@ -66,6 +69,8 @@ constexpr uint32_t kFileChooserFilterKindGlob = 0;
  
  constexpr char kFileUriPrefix[] = "file://";
  
@@ -374,7 +374,7 @@ index b6a116654ef6815e3d97dd9302d2a9930877dda8..20ebcdd46bd1570ad671c661e7f866ea
  enum class ServiceAvailability {
    kNotStarted,
    kInProgress,
-@@ -70,6 +75,9 @@ enum class ServiceAvailability {
+@@ -75,6 +80,9 @@ enum class ServiceAvailability {
  
  ServiceAvailability g_service_availability = ServiceAvailability::kNotStarted;
  
@@ -384,7 +384,7 @@ index b6a116654ef6815e3d97dd9302d2a9930877dda8..20ebcdd46bd1570ad671c661e7f866ea
  scoped_refptr<base::SequencedTaskRunner>& GetMainTaskRunner() {
    static base::NoDestructor<scoped_refptr<base::SequencedTaskRunner>>
        main_task_runner;
-@@ -89,9 +97,10 @@ void OnGetPropertyReply(dbus::Response* response) {
+@@ -94,9 +102,10 @@ void OnGetPropertyReply(dbus::Response* response) {
      return;
    }
  
@@ -396,7 +396,7 @@ index b6a116654ef6815e3d97dd9302d2a9930877dda8..20ebcdd46bd1570ad671c661e7f866ea
  }
  
  void OnServiceStarted(std::optional<bool> service_started) {
-@@ -159,6 +168,12 @@ void SelectFileDialogLinuxPortal::StartAvailabilityTestInBackground() {
+@@ -164,6 +173,12 @@ void SelectFileDialogLinuxPortal::StartAvailabilityTestInBackground() {
    }
    g_service_availability = ServiceAvailability::kInProgress;
  
@@ -409,7 +409,7 @@ index b6a116654ef6815e3d97dd9302d2a9930877dda8..20ebcdd46bd1570ad671c661e7f866ea
    GetMainTaskRunner() = base::SequencedTaskRunner::GetCurrentDefault();
  
    dbus_utils::CheckForServiceAndStart(dbus_thread_linux::GetSharedSessionBus(),
-@@ -175,6 +190,11 @@ bool SelectFileDialogLinuxPortal::IsPortalAvailable() {
+@@ -180,6 +195,11 @@ bool SelectFileDialogLinuxPortal::IsPortalAvailable() {
    return g_service_availability == ServiceAvailability::kAvailable;
  }
  
@@ -421,7 +421,7 @@ index b6a116654ef6815e3d97dd9302d2a9930877dda8..20ebcdd46bd1570ad671c661e7f866ea
  bool SelectFileDialogLinuxPortal::IsRunning(
      gfx::NativeWindow parent_window) const {
    return parent_window && host_ && host_.get() == parent_window->GetHost();
-@@ -377,11 +397,14 @@ DbusDictionary SelectFileDialogLinuxPortal::BuildOptionsDictionary(
+@@ -382,11 +402,14 @@ DbusDictionary SelectFileDialogLinuxPortal::BuildOptionsDictionary(
      const PortalFilterSet& filter_set) {
    DbusDictionary dict;
  
@@ -439,7 +439,7 @@ index b6a116654ef6815e3d97dd9302d2a9930877dda8..20ebcdd46bd1570ad671c661e7f866ea
        [[fallthrough]];
      case SelectFileDialog::SELECT_FOLDER:
      case SelectFileDialog::Type::SELECT_EXISTING_FOLDER:
-@@ -394,6 +417,10 @@ DbusDictionary SelectFileDialogLinuxPortal::BuildOptionsDictionary(
+@@ -399,6 +422,10 @@ DbusDictionary SelectFileDialogLinuxPortal::BuildOptionsDictionary(
        break;
    }
  

+ 4 - 4
patches/chromium/feat_configure_launch_options_for_service_process.patch

@@ -187,10 +187,10 @@ index bdd5bec301f5fcff2d3e3d7994ecbc4eae46da36..f6082bada22c5f4e70af60ea6f555b0f
    host->GetChildProcess()->BindServiceInterface(std::move(receiver));
  }
 diff --git a/content/browser/utility_process_host.cc b/content/browser/utility_process_host.cc
-index 5521f41ee56e5fb46695e9f828a269a215eeedde..9fe00bd105d237cc411ce2e179a6ba6f91ded89b 100644
+index aa8b2a92140b2be01860f4de0b739b90942ecd4c..51962b374123297f89126b6a5ebe3fccf0606ca1 100644
 --- a/content/browser/utility_process_host.cc
 +++ b/content/browser/utility_process_host.cc
-@@ -184,11 +184,13 @@ const ChildProcessData& UtilityProcessHost::GetData() {
+@@ -188,11 +188,13 @@ const ChildProcessData& UtilityProcessHost::GetData() {
    return process_->GetData();
  }
  
@@ -206,7 +206,7 @@ index 5521f41ee56e5fb46695e9f828a269a215eeedde..9fe00bd105d237cc411ce2e179a6ba6f
  
  bool UtilityProcessHost::Start() {
    return StartProcess();
-@@ -235,6 +237,30 @@ void UtilityProcessHost::SetZygoteForTesting(ZygoteCommunication* handle) {
+@@ -239,6 +241,30 @@ void UtilityProcessHost::SetZygoteForTesting(ZygoteCommunication* handle) {
  }
  #endif  // BUILDFLAG(USE_ZYGOTE)
  
@@ -237,7 +237,7 @@ index 5521f41ee56e5fb46695e9f828a269a215eeedde..9fe00bd105d237cc411ce2e179a6ba6f
  mojom::ChildProcess* UtilityProcessHost::GetChildProcess() {
    return static_cast<ChildProcessHostImpl*>(process_->GetHost())
        ->child_process();
-@@ -442,9 +468,26 @@ bool UtilityProcessHost::StartProcess() {
+@@ -448,9 +474,26 @@ bool UtilityProcessHost::StartProcess() {
      }
  #endif  // BUILDFLAG(ENABLE_GPU_CHANNEL_MEDIA_CAPTURE) && !BUILDFLAG(IS_WIN)
  

+ 12 - 13
patches/chromium/feat_enable_offscreen_rendering_with_viz_compositor.patch

@@ -90,7 +90,7 @@ index 8af69cac78b7488d28f1f05ccb174793fe5148cd..9f74e511c263d147b5fbe81fe100d217
   private:
    const HWND hwnd_;
 diff --git a/components/viz/service/BUILD.gn b/components/viz/service/BUILD.gn
-index 6ac941799bda10ce7f93612691a438018160a9dd..5ee0a80cb435a1aaacbea08614a5fe3b26afbe10 100644
+index 51fd7f87f0d8b07b1b7f531ff0033976d9327e53..f53aa0c2c8b3a428c08ca6715d6b837a28ad0892 100644
 --- a/components/viz/service/BUILD.gn
 +++ b/components/viz/service/BUILD.gn
 @@ -168,6 +168,8 @@ viz_component("service") {
@@ -522,10 +522,10 @@ index 4d6cc977ed5000d93918336a0dd57f60c0e95bbb..54d936e86b60f0538c70c4ee69e109cc
    waiting_on_draw_ack_ = true;
  
 diff --git a/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc b/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc
-index 2707617f5ba99783d604b32abe72b6d7220a58e5..8d0ab7d1d203371ae1f4269ece4e2aab394cb534 100644
+index 5f2da4e50e5b1ef4a120c4b8102ebcaea584681f..014e985ad5eaac42370657ebaf8484e376438332 100644
 --- a/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc
 +++ b/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc
-@@ -111,7 +111,8 @@ RootCompositorFrameSinkImpl::Create(
+@@ -112,7 +112,8 @@ RootCompositorFrameSinkImpl::Create(
        params->gpu_compositing, params->widget);
    auto output_surface = output_surface_provider->CreateOutputSurface(
        params->widget, params->gpu_compositing, display_client.get(),
@@ -564,7 +564,7 @@ index 399fba1a3d4e601dc2cdd5f1f4def8b7fd7a3011..8bcbe0d26c80323155d536c0d3a177a1
    gpu::SyncPointManager* GetSyncPointManager() override;
    gpu::Scheduler* GetGpuScheduler() override;
 diff --git a/content/browser/compositor/viz_process_transport_factory.cc b/content/browser/compositor/viz_process_transport_factory.cc
-index 68ab07c7a6955f363a0e0eb3a6607c95edb521d3..01edb81229bf7a9205e1de54cdbb8e0dd0f4da80 100644
+index 378910976c702d81c263973d29e17646c3963494..84553085b75b8cb9296c4af726f9a7bfc0318980 100644
 --- a/content/browser/compositor/viz_process_transport_factory.cc
 +++ b/content/browser/compositor/viz_process_transport_factory.cc
 @@ -441,8 +441,14 @@ void VizProcessTransportFactory::OnEstablishedGpuChannel(
@@ -597,7 +597,7 @@ index 7d19b6be8bb0e0269c381cf6efdf79eaeff1e935..b8ec06ade095df99c024396a601dbf1a
  
    // Sends the created child window to the browser process so that it can be
 diff --git a/services/viz/privileged/mojom/compositing/frame_sink_manager.mojom b/services/viz/privileged/mojom/compositing/frame_sink_manager.mojom
-index 7c9ea17904d861b1f2284124e43e7250bd60dc0f..935971e7b446ed0fa23eec4b4983750842dd70c9 100644
+index 4828bfcb0c221ce9de3f1fe9952849c542e7e3df..4d3667deff36216db4d51ae3f01f732d691f4866 100644
 --- a/services/viz/privileged/mojom/compositing/frame_sink_manager.mojom
 +++ b/services/viz/privileged/mojom/compositing/frame_sink_manager.mojom
 @@ -39,6 +39,7 @@ struct RootCompositorFrameSinkParams {
@@ -620,7 +620,7 @@ index 2f462f0deb5fc8a637457243fb5d5849fc214d14..695869b83cefaa24af93a2e11b39de05
 +  Draw(gfx.mojom.Rect damage_rect) => ();
  };
 diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
-index 6db9abcb6d7df1aed6d3b6b89e353cfd64855d94..8e1e8c3eb1c23a6b8dcb006154ab36b91e6bcc04 100644
+index f58baf68d5c77cc00b421fe9c82fb47fda9c5da4..d273005942ac48cef4d9b00f5b1baeb917114c80 100644
 --- a/ui/compositor/compositor.h
 +++ b/ui/compositor/compositor.h
 @@ -90,6 +90,7 @@ class DisplayPrivate;
@@ -631,10 +631,10 @@ index 6db9abcb6d7df1aed6d3b6b89e353cfd64855d94..8e1e8c3eb1c23a6b8dcb006154ab36b9
  class HostFrameSinkManager;
  class LocalSurfaceId;
  class RasterContextProvider;
-@@ -142,6 +143,16 @@ class COMPOSITOR_EXPORT ContextFactory {
-   virtual viz::HostFrameSinkManager* GetHostFrameSinkManager() = 0;
+@@ -152,6 +153,15 @@ class COMPOSITOR_EXPORT ExternalBeginFrameControllerClientFactory {
+       viz::mojom::ExternalBeginFrameControllerClient>
+   CreateExternalBeginFrameControllerClient() = 0;
  };
- 
 +class COMPOSITOR_EXPORT CompositorDelegate {
 + public:
 +  virtual bool IsOffscreen() const = 0;
@@ -644,11 +644,10 @@ index 6db9abcb6d7df1aed6d3b6b89e353cfd64855d94..8e1e8c3eb1c23a6b8dcb006154ab36b9
 + protected:
 +  virtual ~CompositorDelegate() {}
 +};
-+
+ 
  // Compositor object to take care of GPU painting.
  // A Browser compositor object is responsible for generating the final
- // displayable form of pixels comprising a single widget's contents. It draws an
-@@ -185,6 +196,9 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver,
+@@ -196,6 +206,9 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver,
    // Schedules a redraw of the layer tree associated with this compositor.
    void ScheduleDraw();
  
@@ -658,7 +657,7 @@ index 6db9abcb6d7df1aed6d3b6b89e353cfd64855d94..8e1e8c3eb1c23a6b8dcb006154ab36b9
    // Sets the root of the layer tree drawn by this Compositor. The root layer
    // must have no parent. The compositor's root layer is reset if the root layer
    // is destroyed. NULL can be passed to reset the root layer, in which case the
-@@ -589,6 +603,8 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver,
+@@ -612,6 +625,8 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver,
        simple_begin_frame_observers_;
    std::unique_ptr<ui::HostBeginFrameObserver> host_begin_frame_observer_;
  

+ 2 - 2
patches/chromium/feat_enable_passing_exit_code_on_service_process_crash.patch

@@ -52,10 +52,10 @@ index f6082bada22c5f4e70af60ea6f555b0f363919c5..f691676a629bf82f81117599ae0bd0a4
  
   private:
 diff --git a/content/browser/utility_process_host.cc b/content/browser/utility_process_host.cc
-index 9fe00bd105d237cc411ce2e179a6ba6f91ded89b..4b49a7e2c2693585b30bf031e32b40976c888e21 100644
+index 51962b374123297f89126b6a5ebe3fccf0606ca1..ea4260d475933cb37cb2ac4873f6d886e438b909 100644
 --- a/content/browser/utility_process_host.cc
 +++ b/content/browser/utility_process_host.cc
-@@ -525,7 +525,7 @@ void UtilityProcessHost::OnProcessCrashed(int exit_code) {
+@@ -531,7 +531,7 @@ void UtilityProcessHost::OnProcessCrashed(int exit_code) {
    // Take ownership of |client_| so the destructor doesn't notify it of
    // termination.
    auto client = std::move(client_);

+ 1 - 1
patches/chromium/feat_expose_raw_response_headers_from_urlloader.patch

@@ -112,7 +112,7 @@ index 5c4b8a05034f8defacbc13671fe9bc92f76ade5a..e7390e01f113755613f42d592b36108b
    string mime_type;
  
 diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc
-index d8d746faec7d3251835b8c8d070940bdfb5c4b6a..d5b54e9e4d4969199c4ad7a08bd384009e221743 100644
+index 805ebedd50772df795c13684d8f4e2452723fee9..3ef307958c8b1b95af797a95fe9deb131b8a0dbb 100644
 --- a/services/network/url_loader.cc
 +++ b/services/network/url_loader.cc
 @@ -666,6 +666,9 @@ URLLoader::URLLoader(

+ 2 - 2
patches/chromium/fix_crash_loading_non-standard_schemes_in_iframes.patch

@@ -28,10 +28,10 @@ The patch should be removed in favor of either:
 Upstream bug https://bugs.chromium.org/p/chromium/issues/detail?id=1081397.
 
 diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
-index 84b894ac879b5a0ada509da98294db75eebe7fd7..fbc0fdf6ee5edf3c284260ac8db2f90c40d32d6d 100644
+index 0c67607fd99b2fceba176308a041c8f08643506a..82c4a7e1d441f1444d6ca32a56e8b0381209ec2f 100644
 --- a/content/browser/renderer_host/navigation_request.cc
 +++ b/content/browser/renderer_host/navigation_request.cc
-@@ -10947,6 +10947,12 @@ NavigationRequest::GetOriginForURLLoaderFactoryUncheckedWithDebugInfo() {
+@@ -10980,6 +10980,12 @@ NavigationRequest::GetOriginForURLLoaderFactoryUncheckedWithDebugInfo() {
          "blob");
    }
  

+ 3 - 3
patches/chromium/fix_disabling_background_throttling_in_compositor.patch

@@ -53,10 +53,10 @@ index 12cf38959be01d05cd43a9635ac87538c4f5e5ad..1a2a1bb5480085432c9575a90fb6959b
  void Compositor::SetSeamlessRefreshRates(
      const std::vector<float>& seamless_refresh_rates) {
 diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
-index 8e1e8c3eb1c23a6b8dcb006154ab36b91e6bcc04..962e807c07365015b964c9b6361035d27ec8e4ae 100644
+index d273005942ac48cef4d9b00f5b1baeb917114c80..679c4fb30252b447c83dfc4d75caeded54798299 100644
 --- a/ui/compositor/compositor.h
 +++ b/ui/compositor/compositor.h
-@@ -511,6 +511,10 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver,
+@@ -521,6 +521,10 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver,
  
    const cc::LayerTreeSettings& GetLayerTreeSettings() const;
  
@@ -67,7 +67,7 @@ index 8e1e8c3eb1c23a6b8dcb006154ab36b91e6bcc04..962e807c07365015b964c9b6361035d2
    size_t saved_events_metrics_count_for_testing() const {
      return host_->saved_events_metrics_count_for_testing();
    }
-@@ -684,6 +688,12 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver,
+@@ -706,6 +710,12 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver,
    // See go/report-ux-metrics-at-painting for details.
    bool animation_started_ = false;
  

+ 1 - 1
patches/chromium/fix_font_face_resolution_when_renderer_is_blocked.patch

@@ -11,7 +11,7 @@ while the renderer is blocked. This Cl takes an approach similar to that taken i
 MediaQueryList in order to enable the promise to be resolved.
 
 diff --git a/third_party/blink/renderer/core/css/font_face_set_document.cc b/third_party/blink/renderer/core/css/font_face_set_document.cc
-index a477f3364122643cd79305adf86bb3cbbbded37e..479778c0118c7813ab424f4adb4f424f89ce3596 100644
+index 79d15ae4d9de6350429b9b907d5136266d02c579..7e26808b3ef4437940ee6745d2651037c1bba9a2 100644
 --- a/third_party/blink/renderer/core/css/font_face_set_document.cc
 +++ b/third_party/blink/renderer/core/css/font_face_set_document.cc
 @@ -27,6 +27,7 @@

+ 5 - 5
patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch

@@ -9,10 +9,10 @@ focus node change via TextInputManager.
 chromium-bug: https://crbug.com/1369605
 
 diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
-index ee083e550adf7533531ebf2834e400a84e692c41..33e73a6bbdf77f776271de6bb05e7d869fe938b5 100644
+index dd7347996d3e4dcf2ba27258b771e705d31384b6..7e88f2322e5f8a2790f19d094bc5a912abb816c8 100644
 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc
 +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
-@@ -3218,6 +3218,12 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged(
+@@ -3225,6 +3225,12 @@ void RenderWidgetHostViewAura::OnTextSelectionChanged(
    }
  }
  
@@ -26,10 +26,10 @@ index ee083e550adf7533531ebf2834e400a84e692c41..33e73a6bbdf77f776271de6bb05e7d86
      RenderWidgetHostViewAura* popup_child_host_view) {
    popup_child_host_view_ = popup_child_host_view;
 diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
-index 5410c9d207bad1da2f733e153630400f50642617..1696658f38b965f69146c76c7f48d04a15a2cc8d 100644
+index 11fdb50a81150113d5064c8fcd4abc85764660b2..c457232607723779355384e4c6843ca453f5799d 100644
 --- a/content/browser/renderer_host/render_widget_host_view_aura.h
 +++ b/content/browser/renderer_host/render_widget_host_view_aura.h
-@@ -651,6 +651,8 @@ class CONTENT_EXPORT RenderWidgetHostViewAura
+@@ -652,6 +652,8 @@ class CONTENT_EXPORT RenderWidgetHostViewAura
        RenderWidgetHostViewBase* updated_view) override;
    void OnTextSelectionChanged(TextInputManager* text_input_mangager,
                                RenderWidgetHostViewBase* updated_view) override;
@@ -87,7 +87,7 @@ index 51522e60d6dc14f1113cc438558b6b393c3fe73a..153ed02f493a83ef9ca354cc18736f93
    // The view with active text input state, i.e., a focused <input> element.
    // It will be nullptr if no such view exists. Note that the active view
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
-index 5cf853b42371e044197e998bcf91b5cd2350ee43..e7f78b970f433a232cbcb172904d0ab993c5ac6a 100644
+index b3d5c5522ea1afb0a3d3ce076f5e05f34b4ea488..0346d081467f0728183f55b0d088325d776e6290 100644
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
 @@ -9701,7 +9701,7 @@ void WebContentsImpl::OnFocusedElementChangedInFrame(

+ 0 - 236
patches/chromium/fix_osr_stutter_in_both_cpu_and_gpu_capture_when_page_has_animation.patch

@@ -1,236 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: reito <[email protected]>
-Date: Wed, 12 Feb 2025 20:42:02 +0800
-Subject: fix: osr stutter in both cpu and gpu capture when page has animation.
-
-https://crrev.org/c/6232721
-https://crbug.com/391118566
-There's bug in VideoCaptureOracle that cause stutter in both cpu and gpu capture when page has animation.
-The upstream has a fix, which will be available in Chromium M135.
-Backport this fix for Electron versions before that.
-
-diff --git a/media/capture/content/video_capture_oracle.cc b/media/capture/content/video_capture_oracle.cc
-index dad9598799a670b3cfb14965bc8a7b4ea3b4f95f..05a82788ae1e5c304ee150a2390f346d7b454630 100644
---- a/media/capture/content/video_capture_oracle.cc
-+++ b/media/capture/content/video_capture_oracle.cc
-@@ -118,8 +118,9 @@ void VideoCaptureOracle::SetCaptureSizeConstraints(
- void VideoCaptureOracle::SetAutoThrottlingEnabled(bool enabled) {
-   const bool was_enabled =
-       (capture_size_throttling_mode_ != kThrottlingDisabled);
--  if (was_enabled == enabled)
-+  if (was_enabled == enabled) {
-     return;
-+  }
-   capture_size_throttling_mode_ =
-       enabled ? kThrottlingEnabled : kThrottlingDisabled;
-   VLOG(1) << "Capture size auto-throttling is now "
-@@ -127,19 +128,22 @@ void VideoCaptureOracle::SetAutoThrottlingEnabled(bool enabled) {
- 
-   // When not auto-throttling, have the CaptureResolutionChooser target the max
-   // resolution within constraints.
--  if (!enabled)
-+  if (!enabled) {
-     resolution_chooser_.SetTargetFrameArea(std::numeric_limits<int>::max());
-+  }
- 
--  if (next_frame_number_ > 0)
-+  if (next_frame_number_ > 0) {
-     CommitCaptureSizeAndReset(GetFrameTimestamp(next_frame_number_ - 1));
-+  }
- }
- 
- void VideoCaptureOracle::SetSourceSize(const gfx::Size& source_size) {
-   resolution_chooser_.SetSourceSize(source_size);
-   // If the |resolution_chooser_| computed a new capture size, that will become
-   // visible via a future call to ObserveEventAndDecideCapture().
--  source_size_change_time_ = (next_frame_number_ == 0) ?
--      base::TimeTicks() : GetFrameTimestamp(next_frame_number_ - 1);
-+  source_size_change_time_ = (next_frame_number_ == 0)
-+                                 ? base::TimeTicks()
-+                                 : GetFrameTimestamp(next_frame_number_ - 1);
- }
- 
- bool VideoCaptureOracle::ObserveEventAndDecideCapture(
-@@ -172,6 +176,15 @@ bool VideoCaptureOracle::ObserveEventAndDecideCapture(
-         if (should_sample) {
-           event_time = content_sampler_.frame_timestamp();
-           duration_of_next_frame_ = content_sampler_.sampling_period();
-+        } else {
-+          // https://crbug.com/391118566
-+          // The content sampler may not sample the frame, if the
-+          // `detected_region_` does not match the `damage_rect`. In this case,
-+          // the capture may halt up to kNonAnimatingThreshold (250ms) and cause
-+          // the video stutter, until it recovers and do another animation
-+          // detection. To avoid this, we should use the smoothing sampler as a
-+          // fallback to prevent the bad output.
-+          should_sample = smoothing_sampler_.ShouldSample();
-         }
-         last_time_animation_was_detected_ = event_time;
-       } else {
-@@ -198,8 +211,9 @@ bool VideoCaptureOracle::ObserveEventAndDecideCapture(
-       NOTREACHED();
-   }
- 
--  if (!should_sample)
-+  if (!should_sample) {
-     return false;
-+  }
- 
-   // If the exact duration of the next frame has not been determined, estimate
-   // it using the difference between the current and last frame.
-@@ -373,16 +387,18 @@ void VideoCaptureOracle::RecordConsumerFeedback(
- 
-   // resource_utilization feedback.
- 
--  if (capture_size_throttling_mode_ == kThrottlingDisabled)
-+  if (capture_size_throttling_mode_ == kThrottlingDisabled) {
-     return;
-+  }
- 
-   if (!std::isfinite(feedback.resource_utilization)) {
-     LOG(DFATAL) << "Non-finite utilization provided by consumer for frame #"
-                 << frame_number << ": " << feedback.resource_utilization;
-     return;
-   }
--  if (feedback.resource_utilization <= 0.0)
-+  if (feedback.resource_utilization <= 0.0) {
-     return;  // Non-positive values are normal, meaning N/A.
-+  }
- 
-   if (capture_size_throttling_mode_ != kThrottlingActive) {
-     VLOG(1) << "Received consumer feedback at frame #" << frame_number
-@@ -553,12 +569,14 @@ int VideoCaptureOracle::AnalyzeForIncreasedArea(base::TimeTicks analyze_time) {
-   const int current_area = capture_size_.GetArea();
-   const int increased_area =
-       resolution_chooser_.FindLargerFrameSize(current_area, 1).GetArea();
--  if (increased_area <= current_area)
-+  if (increased_area <= current_area) {
-     return -1;
-+  }
- 
-   // Determine whether the buffer pool could handle an increase in area.
--  if (!HasSufficientRecentFeedback(buffer_pool_utilization_, analyze_time))
-+  if (!HasSufficientRecentFeedback(buffer_pool_utilization_, analyze_time)) {
-     return -1;
-+  }
-   if (buffer_pool_utilization_.current() > 0.0) {
-     const int buffer_capable_area = base::saturated_cast<int>(
-         current_area / buffer_pool_utilization_.current());
-@@ -593,8 +611,9 @@ int VideoCaptureOracle::AnalyzeForIncreasedArea(base::TimeTicks analyze_time) {
- 
-   // At this point, the system is currently under-utilized.  Reset the start
-   // time if the system was not under-utilized when the last analysis was made.
--  if (start_time_of_underutilization_.is_null())
-+  if (start_time_of_underutilization_.is_null()) {
-     start_time_of_underutilization_ = analyze_time;
-+  }
- 
-   // If the under-utilization started soon after the last source size change,
-   // permit an immediate increase in the capture area.  This allows the system
-diff --git a/media/capture/content/video_capture_oracle_unittest.cc b/media/capture/content/video_capture_oracle_unittest.cc
-index 066676fa998db6782270ddbf42fe176d88eb30d4..6cd7567e91bc8c496846a685aa1506c7548f3a21 100644
---- a/media/capture/content/video_capture_oracle_unittest.cc
-+++ b/media/capture/content/video_capture_oracle_unittest.cc
-@@ -158,21 +158,26 @@ TEST(VideoCaptureOracleTest, TransitionsSmoothlyBetweenSamplers) {
-     const bool provide_animated_content_event =
-         (i % 100) >= 25 && (i % 100) < 75;
- 
--    // Only the few events that trigger the lock-out transition should be
--    // dropped, because the AnimatedContentSampler doesn't yet realize the
--    // animation ended.  Otherwise, the oracle should always decide to sample
--    // because one of its samplers says to.
--    const bool require_oracle_says_sample = (i % 100) < 75 || (i % 100) >= 78;
-+    // https://crbug.com/391118566
-+    // Previously the AnimatedContentSampler has a bug that cause jank.
-+    // The oracle should always use SmoothEventSampler as a fallback. If
-+    // AnimatedContentSampler doesn't yet realize the animation ended or
-+    // doesn't keep up with the prediction it make, and it will wait for
-+    // kNonAnimatingThreshold before it lock-out and hand over to smooth
-+    // handler. This will cause the video to stutter and it is unacceptable.
-+    // So, when the AnimatedContentSampler goes into wrong state, we now
-+    // use SmoothEventSampler's decision as a fallback to prevent jank output
-+    // and still has a overall limit on capture frequency.
-     const bool oracle_says_sample = oracle.ObserveEventAndDecideCapture(
-         VideoCaptureOracle::kCompositorUpdate,
-         provide_animated_content_event ? animation_damage_rect : gfx::Rect(),
-         t);
--    if (require_oracle_says_sample)
--      ASSERT_TRUE(oracle_says_sample);
--    if (!oracle_says_sample) {
--      ASSERT_EQ(base::TimeDelta(), oracle.estimated_frame_duration());
--      continue;
--    }
-+
-+    // Because we now use SmoothEventSampler as a fallback, oracle should
-+    // always say sample. The previous AnimatedContentSampler lock-out
-+    // dropped frame are now revived by SmoothEventSampler, since this test's
-+    // capture frequency always meets min capture limit requirement.
-+    ASSERT_TRUE(oracle_says_sample);
-     ASSERT_LT(base::TimeDelta(), oracle.estimated_frame_duration());
- 
-     const int frame_number = oracle.next_frame_number();
-@@ -184,12 +189,9 @@ TEST(VideoCaptureOracleTest, TransitionsSmoothlyBetweenSamplers) {
-     if (!last_frame_timestamp.is_null()) {
-       const base::TimeDelta delta = frame_timestamp - last_frame_timestamp;
-       EXPECT_LE(event_increment.InMicroseconds(), delta.InMicroseconds());
--      // Right after the AnimatedContentSampler lock-out transition, there were
--      // a few frames dropped, so allow a gap in the timestamps.  Otherwise, the
--      // delta between frame timestamps should never be more than 2X the
-+      // The delta between frame timestamps should never be more than 2X the
-       // |event_increment|.
--      const base::TimeDelta max_acceptable_delta =
--          (i % 100) == 78 ? event_increment * 5 : event_increment * 2;
-+      const base::TimeDelta max_acceptable_delta = event_increment * 2;
-       EXPECT_GE(max_acceptable_delta.InMicroseconds(), delta.InMicroseconds());
-     }
-     last_frame_timestamp = frame_timestamp;
-@@ -444,9 +446,9 @@ void RunAutoThrottleTest(bool is_content_animating,
-   // expect the resolution to remain constant.  Repeat.
-   for (int i = 0; i < 2; ++i) {
-     const gfx::Size starting_size = oracle.capture_size();
--    SCOPED_TRACE(::testing::Message() << "Stepping down from "
--                                      << starting_size.ToString()
--                                      << ", i=" << i);
-+    SCOPED_TRACE(::testing::Message()
-+                 << "Stepping down from " << starting_size.ToString()
-+                 << ", i=" << i);
- 
-     gfx::Size stepped_down_size;
-     end_t = t + base::Seconds(10);
-@@ -471,9 +473,10 @@ void RunAutoThrottleTest(bool is_content_animating,
-       oracle.RecordCapture(with_consumer_feedback ? 0.25 : utilization);
-       base::TimeTicks ignored;
-       ASSERT_TRUE(oracle.CompleteCapture(frame_number, true, &ignored));
--      if (with_consumer_feedback)
-+      if (with_consumer_feedback) {
-         oracle.RecordConsumerFeedback(frame_number,
-                                       media::VideoCaptureFeedback(utilization));
-+      }
-     }
-   }
- 
-@@ -482,9 +485,9 @@ void RunAutoThrottleTest(bool is_content_animating,
-   // utilization and expect the resolution to remain constant.  Repeat.
-   for (int i = 0; i < 2; ++i) {
-     const gfx::Size starting_size = oracle.capture_size();
--    SCOPED_TRACE(::testing::Message() << "Stepping up from "
--                                      << starting_size.ToString()
--                                      << ", i=" << i);
-+    SCOPED_TRACE(::testing::Message()
-+                 << "Stepping up from " << starting_size.ToString()
-+                 << ", i=" << i);
- 
-     gfx::Size stepped_up_size;
-     end_t = t + base::Seconds(is_content_animating ? 90 : 10);
-@@ -513,9 +516,10 @@ void RunAutoThrottleTest(bool is_content_animating,
-       oracle.RecordCapture(with_consumer_feedback ? 0.25 : utilization);
-       base::TimeTicks ignored;
-       ASSERT_TRUE(oracle.CompleteCapture(frame_number, true, &ignored));
--      if (with_consumer_feedback)
-+      if (with_consumer_feedback) {
-         oracle.RecordConsumerFeedback(frame_number,
-                                       media::VideoCaptureFeedback(utilization));
-+      }
-     }
-   }
- }

+ 2 - 2
patches/chromium/fix_restore_original_resize_performance_on_macos.patch

@@ -11,10 +11,10 @@ This patch should be upstreamed as a conditional revert of the logic in desktop
 vs mobile runtimes.  i.e. restore the old logic only on desktop platforms
 
 diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
-index 4d489a14d3f759ca9464c9a594d5800690943119..f3f8fee8c81e19c0dfa5c3649abe274112dbd0fd 100644
+index e49341203f9de52d7adf3152400f424bde11b0e2..2062b186448130159ca1cafcd86a074dff8ce84c 100644
 --- a/content/browser/renderer_host/render_widget_host_impl.cc
 +++ b/content/browser/renderer_host/render_widget_host_impl.cc
-@@ -2063,9 +2063,8 @@ RenderWidgetHostImpl::GetWidgetInputHandler() {
+@@ -2090,9 +2090,8 @@ RenderWidgetHostImpl::GetWidgetInputHandler() {
  void RenderWidgetHostImpl::NotifyScreenInfoChanged() {
    // The resize message (which may not happen immediately) will carry with it
    // the screen info as well as the new size (if the screen has changed scale

+ 9 - 9
patches/chromium/fix_return_v8_value_from_localframe_requestexecutescript.patch

@@ -20,7 +20,7 @@ index fc9cb7e68bdad4c40fab63f70243e09ad005ab80..199fbceda530da31aab9126d78b4bd21
        injector_->ExpectsResults(), injector_->ShouldWaitForPromise());
  }
 diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h
-index 8acbc0ba8f4ab4acd2b55339ba44d0d46087c155..edc0a323ec444c8a4f51ac632f49d27d76537812 100644
+index a75e0a913627e0648b2857613f50bb9a7777ce1a..bf1e77268249efea84dc68fa16ef383cc2292edd 100644
 --- a/third_party/blink/public/web/web_local_frame.h
 +++ b/third_party/blink/public/web/web_local_frame.h
 @@ -459,6 +459,7 @@ class BLINK_EXPORT WebLocalFrame : public WebFrame {
@@ -59,10 +59,10 @@ index cba373664bec3a32abad6fe0396bd67b53b7e67f..a54f1b3351efd2d8f324436f7f35cd43
  
  #endif  // THIRD_PARTY_BLINK_PUBLIC_WEB_WEB_SCRIPT_EXECUTION_CALLBACK_H_
 diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
-index 79ec1e2b1274160cca97d14a69c36eac4bc36b0f..74997dd0f11fbfa3dee2e20b9b2ee895bb339b5a 100644
+index 4da759d7ab6d6fb6b6d4d1648da0e62d7629ad5c..7e537b54b11220f3bc6619b027677182485b201d 100644
 --- a/third_party/blink/renderer/core/frame/local_frame.cc
 +++ b/third_party/blink/renderer/core/frame/local_frame.cc
-@@ -3136,6 +3136,7 @@ void LocalFrame::RequestExecuteScript(
+@@ -3092,6 +3092,7 @@ void LocalFrame::RequestExecuteScript(
      mojom::blink::EvaluationTiming evaluation_timing,
      mojom::blink::LoadEventBlockingOption blocking_option,
      WebScriptExecutionCallback callback,
@@ -70,7 +70,7 @@ index 79ec1e2b1274160cca97d14a69c36eac4bc36b0f..74997dd0f11fbfa3dee2e20b9b2ee895
      BackForwardCacheAware back_forward_cache_aware,
      mojom::blink::WantResultOption want_result_option,
      mojom::blink::PromiseResultOption promise_behavior) {
-@@ -3168,7 +3169,7 @@ void LocalFrame::RequestExecuteScript(
+@@ -3124,7 +3125,7 @@ void LocalFrame::RequestExecuteScript(
    PausableScriptExecutor::CreateAndRun(
        script_state, std::move(script_sources), execute_script_policy,
        user_gesture, evaluation_timing, blocking_option, want_result_option,
@@ -80,10 +80,10 @@ index 79ec1e2b1274160cca97d14a69c36eac4bc36b0f..74997dd0f11fbfa3dee2e20b9b2ee895
  
  void LocalFrame::SetEvictCachedSessionStorageOnFreezeOrUnload() {
 diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h
-index 3feb24ec648ef98dd86d76ed9da55192ced42cb2..98b64770169bda80a10f15ba7cb6f223cf627f37 100644
+index 846bb3f11c60152e86d8ee50369a8bbcc7a6cb7d..5047a3dc08cdf24ee3418c39c930e3f34ea83add 100644
 --- a/third_party/blink/renderer/core/frame/local_frame.h
 +++ b/third_party/blink/renderer/core/frame/local_frame.h
-@@ -824,6 +824,7 @@ class CORE_EXPORT LocalFrame final
+@@ -814,6 +814,7 @@ class CORE_EXPORT LocalFrame final
                              mojom::blink::EvaluationTiming,
                              mojom::blink::LoadEventBlockingOption,
                              WebScriptExecutionCallback,
@@ -92,7 +92,7 @@ index 3feb24ec648ef98dd86d76ed9da55192ced42cb2..98b64770169bda80a10f15ba7cb6f223
                              mojom::blink::WantResultOption,
                              mojom::blink::PromiseResultOption);
 diff --git a/third_party/blink/renderer/core/frame/local_frame_mojo_handler.cc b/third_party/blink/renderer/core/frame/local_frame_mojo_handler.cc
-index 223fe3d3bb6bdb829421b20f70eab803bacfa8f1..2eedd1e9744e687b21d094533e683ce2acf5c1e5 100644
+index b77ad041a717ef8f317a9d15edd61af3c465b2aa..e3955c64ff894682b91c4cc3c49c672659e3a3bf 100644
 --- a/third_party/blink/renderer/core/frame/local_frame_mojo_handler.cc
 +++ b/third_party/blink/renderer/core/frame/local_frame_mojo_handler.cc
 @@ -964,6 +964,7 @@ void LocalFrameMojoHandler::JavaScriptExecuteRequestInIsolatedWorld(
@@ -215,7 +215,7 @@ index c7ae64a16dbf0a15bb60276a2e1002d72621f889..28d375a355b31c6f764c3158e5948777
        mojom::blink::WantResultOption::kWantResult, wait_for_promise);
  }
 diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
-index ef62cdde31f6fce7e021f1efc3d484e6968fb3ea..b8eb13204bdbc7bb9b649aac32463910b34bcb84 100644
+index 4324f5cfe8fe78bb42a4bb6b393a5f2a1591b141..45293740bb09f87d237b21867b8aba5967852686 100644
 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
 +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
 @@ -1097,14 +1097,15 @@ void WebLocalFrameImpl::RequestExecuteScript(
@@ -237,7 +237,7 @@ index ef62cdde31f6fce7e021f1efc3d484e6968fb3ea..b8eb13204bdbc7bb9b649aac32463910
  
  bool WebLocalFrameImpl::IsInspectorConnected() {
 diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
-index 151a530d610fa47d343994743ce21a2072837626..b254f83e0473de9ab3bebff2fbd968aa126b246c 100644
+index 7bc07b1705207447f7727592049c201b011e6b5c..626d0501c0344d7c171f26c96dc78f5e85fb2a81 100644
 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h
 +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
 @@ -196,6 +196,7 @@ class CORE_EXPORT WebLocalFrameImpl final

+ 2 - 2
patches/chromium/fix_select_the_first_menu_item_when_opened_via_keyboard.patch

@@ -6,7 +6,7 @@ Subject: fix: select the first menu item when opened via keyboard
 This fixes an accessibility issue where the root view is 'focused' to the screen reader instead of the first menu item as with all other native menus. This patch will be upstreamed.
 
 diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
-index fb9d5cab9629fb58504f6c18082b759c47e31739..399d0b6dd0b4bf3e493570e14ad55a606d23dbf9 100644
+index 6337d0d70f247b06c7871fb7faa75c2b0b7d541c..2bd399161329b054dd67961f767ccc4480af413c 100644
 --- a/ui/views/controls/menu/menu_controller.cc
 +++ b/ui/views/controls/menu/menu_controller.cc
 @@ -700,6 +700,14 @@ void MenuController::Run(Widget* parent,
@@ -24,7 +24,7 @@ index fb9d5cab9629fb58504f6c18082b759c47e31739..399d0b6dd0b4bf3e493570e14ad55a60
    if (button_controller) {
      pressed_lock_ = button_controller->TakeLock(
          false, ui::LocatedEvent::FromIfValid(event));
-@@ -2399,19 +2407,15 @@ void MenuController::OpenMenuImpl(MenuItemView* item, bool show) {
+@@ -2401,19 +2409,15 @@ void MenuController::OpenMenuImpl(MenuItemView* item, bool show) {
      }
      item->GetSubmenu()->ShowAt(params);
  

+ 2 - 2
patches/chromium/frame_host_manager.patch

@@ -6,10 +6,10 @@ Subject: frame_host_manager.patch
 Allows embedder to intercept site instances created by chromium.
 
 diff --git a/content/browser/renderer_host/render_frame_host_manager.cc b/content/browser/renderer_host/render_frame_host_manager.cc
-index d6c91f23000c5a15d791560f91a5aa235f2701c7..bf0e2979cf1534b9f72bb44c3e51fa5a41e49566 100644
+index 9030e3be131eb2e4cf60bbe34c8e54bb2912283b..78fa182b5a25a850dc0a4104d8f045057ea3a028 100644
 --- a/content/browser/renderer_host/render_frame_host_manager.cc
 +++ b/content/browser/renderer_host/render_frame_host_manager.cc
-@@ -4693,6 +4693,9 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
+@@ -4716,6 +4716,9 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
      request->ResetStateForSiteInstanceChange();
    }
  

+ 4 - 4
patches/chromium/gin_enable_disable_v8_platform.patch

@@ -7,10 +7,10 @@ We don't use gin to create the V8 platform, because we need to inject Node
 things.
 
 diff --git a/gin/isolate_holder.cc b/gin/isolate_holder.cc
-index 1ec03c80cfee5fc427fad846a4df41b98698961c..1bed0865ba952b611985d41b742274861926925d 100644
+index b3416c90c9071d8d32d30ecf257b64f133b2ae07..8632f1c18b407bb7832900bcebadacb3707224ac 100644
 --- a/gin/isolate_holder.cc
 +++ b/gin/isolate_holder.cc
-@@ -155,11 +155,13 @@ void IsolateHolder::Initialize(ScriptMode mode,
+@@ -162,11 +162,13 @@ void IsolateHolder::Initialize(ScriptMode mode,
                                 std::string js_command_line_flags,
                                 bool disallow_v8_feature_flag_overrides,
                                 v8::FatalErrorCallback fatal_error_callback,
@@ -27,10 +27,10 @@ index 1ec03c80cfee5fc427fad846a4df41b98698961c..1bed0865ba952b611985d41b74227486
    g_reference_table = reference_table;
    g_fatal_error_callback = fatal_error_callback;
 diff --git a/gin/public/isolate_holder.h b/gin/public/isolate_holder.h
-index cb4517de39b2ca7b32db557c6d3dd0227ba5b4c2..d1d178de28c7d46db1c96ba321070612ef5812e1 100644
+index ff42cfbb6a228e902317c7e3ab035d8437d5dd62..e27f177ce27e177abf6cee84cd466e7a8a829ee7 100644
 --- a/gin/public/isolate_holder.h
 +++ b/gin/public/isolate_holder.h
-@@ -118,7 +118,8 @@ class GIN_EXPORT IsolateHolder {
+@@ -119,7 +119,8 @@ class GIN_EXPORT IsolateHolder {
                           std::string js_command_line_flags = {},
                           bool disallow_v8_feature_flag_overrides = false,
                           v8::FatalErrorCallback fatal_error_callback = nullptr,

+ 2 - 2
patches/chromium/gritsettings_resource_ids.patch

@@ -6,10 +6,10 @@ Subject: gritsettings_resource_ids.patch
 Add electron resources file to the list of resource ids generation.
 
 diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec
-index 60e844376f968681fe5ef23c339361b0f95d1f3e..0727a4dbb76230d6c4574c4f014f3a0a6f3f043b 100644
+index 9af4abc3411d81d6839937df38f2a3534eeab9cf..f65e8bd618f71ebb8e5ef30a2eeb8e7417be16d2 100644
 --- a/tools/gritsettings/resource_ids.spec
 +++ b/tools/gritsettings/resource_ids.spec
-@@ -1461,6 +1461,11 @@
+@@ -1463,6 +1463,11 @@
    "<(SHARED_INTERMEDIATE_DIR)/third_party/blink/public/strings/permission_element_generated_strings.grd": {
      "META": {"sizes": {"messages": [2000],}},
      "messages": [10080],

+ 2 - 2
patches/chromium/hack_to_allow_gclient_sync_with_host_os_mac_on_linux_in_ci.patch

@@ -11,10 +11,10 @@ If removing this patch causes no sync failures, it's safe to delete :+1:
 Ref https://chromium-review.googlesource.com/c/chromium/src/+/2953903
 
 diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
-index 741d4952055340590679c5661303e13c8c892e6e..d09bafac19bb5404241ec780937bb469a4869776 100755
+index 76bdbec504d5c14d7ad57e2dabf968800dc60a99..47ef5260dda62057c115da7fb65f7ebaa6cf5c88 100755
 --- a/tools/clang/scripts/update.py
 +++ b/tools/clang/scripts/update.py
-@@ -305,6 +305,8 @@ def GetDefaultHostOs():
+@@ -304,6 +304,8 @@ def GetDefaultHostOs():
        'win32': 'win',
    }
    default_host_os = _PLATFORM_HOST_OS_MAP.get(sys.platform, sys.platform)

+ 1 - 1
patches/chromium/ignore_parse_errors_for_pkey_appusermodel_toastactivatorclsid.patch

@@ -11,7 +11,7 @@ Bug: N/A
 Change-Id: I9fc472212b2d3afac2c8e18a2159bc2d50bbdf98
 
 diff --git a/AUTHORS b/AUTHORS
-index e96a3afdabc731afe355cda83eec4923ea780fec..0b1dc07aad197eab7b79344bc5aee702a2d580ab 100644
+index f4241df1a2f0919c51a15f9a55a24781ac7bd02a..af43f7c96ab4b6daa4a5f823fd9f449530361b7e 100644
 --- a/AUTHORS
 +++ b/AUTHORS
 @@ -340,6 +340,7 @@ David Futcher <[email protected]>

+ 15 - 15
patches/chromium/isolate_holder.patch

@@ -15,21 +15,21 @@ for us to register the isolate in between Isolate::Allocate and
 Isolate::Initialize.
 
 diff --git a/gin/isolate_holder.cc b/gin/isolate_holder.cc
-index 1bed0865ba952b611985d41b742274861926925d..2be37976a1305f1deed561b3b829dbb5d7ae85e7 100644
+index 8632f1c18b407bb7832900bcebadacb3707224ac..d1b95149ea0d16af2606900f10898a355026ffe1 100644
 --- a/gin/isolate_holder.cc
 +++ b/gin/isolate_holder.cc
-@@ -76,7 +76,8 @@ IsolateHolder::IsolateHolder(
-     v8::CreateHistogramCallback create_histogram_callback,
+@@ -81,7 +81,8 @@ IsolateHolder::IsolateHolder(
      v8::AddHistogramSampleCallback add_histogram_sample_callback,
      scoped_refptr<base::SingleThreadTaskRunner> user_visible_task_runner,
--    scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner)
-+    scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner,
+     scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner,
+-    std::unique_ptr<v8::CppHeap> cpp_heap)
++    std::unique_ptr<v8::CppHeap> cpp_heap,
 +    v8::Isolate* isolate)
      : IsolateHolder(std::move(task_runner),
                      access_mode,
                      isolate_type,
-@@ -86,7 +87,8 @@ IsolateHolder::IsolateHolder(
-                                              add_histogram_sample_callback),
+@@ -92,7 +93,8 @@ IsolateHolder::IsolateHolder(
+                                              std::move(cpp_heap)),
                      isolate_creation_mode,
                      std::move(user_visible_task_runner),
 -                    std::move(best_effort_task_runner)) {}
@@ -38,7 +38,7 @@ index 1bed0865ba952b611985d41b742274861926925d..2be37976a1305f1deed561b3b829dbb5
  
  IsolateHolder::IsolateHolder(
      scoped_refptr<base::SingleThreadTaskRunner> task_runner,
-@@ -95,7 +97,8 @@ IsolateHolder::IsolateHolder(
+@@ -101,7 +103,8 @@ IsolateHolder::IsolateHolder(
      std::unique_ptr<v8::Isolate::CreateParams> params,
      IsolateCreationMode isolate_creation_mode,
      scoped_refptr<base::SingleThreadTaskRunner> user_visible_task_runner,
@@ -48,7 +48,7 @@ index 1bed0865ba952b611985d41b742274861926925d..2be37976a1305f1deed561b3b829dbb5
      : access_mode_(access_mode), isolate_type_(isolate_type) {
    CHECK(Initialized())
        << "You need to invoke gin::IsolateHolder::Initialize first";
-@@ -106,7 +109,7 @@ IsolateHolder::IsolateHolder(
+@@ -112,7 +115,7 @@ IsolateHolder::IsolateHolder(
    v8::ArrayBuffer::Allocator* allocator = params->array_buffer_allocator;
    DCHECK(allocator);
  
@@ -58,20 +58,20 @@ index 1bed0865ba952b611985d41b742274861926925d..2be37976a1305f1deed561b3b829dbb5
        isolate_, allocator, access_mode_, task_runner,
        std::move(user_visible_task_runner), std::move(best_effort_task_runner));
 diff --git a/gin/public/isolate_holder.h b/gin/public/isolate_holder.h
-index d1d178de28c7d46db1c96ba321070612ef5812e1..52b8c1af58678b9fee684ff75340c98fcc73b552 100644
+index e27f177ce27e177abf6cee84cd466e7a8a829ee7..dc3a5b0678b9c686e241b492e2c3b5ac833611a3 100644
 --- a/gin/public/isolate_holder.h
 +++ b/gin/public/isolate_holder.h
-@@ -87,7 +87,8 @@ class GIN_EXPORT IsolateHolder {
-       scoped_refptr<base::SingleThreadTaskRunner> user_visible_task_runner =
+@@ -88,7 +88,8 @@ class GIN_EXPORT IsolateHolder {
            nullptr,
        scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner =
--          nullptr);
-+          nullptr,
+           nullptr,
+-      std::unique_ptr<v8::CppHeap> cpp_heap = {});
++      std::unique_ptr<v8::CppHeap> cpp_heap = {},
 +      v8::Isolate* isolate = nullptr);
    IsolateHolder(
        scoped_refptr<base::SingleThreadTaskRunner> task_runner,
        AccessMode access_mode,
-@@ -97,7 +98,8 @@ class GIN_EXPORT IsolateHolder {
+@@ -98,7 +99,8 @@ class GIN_EXPORT IsolateHolder {
        scoped_refptr<base::SingleThreadTaskRunner> user_visible_task_runner =
            nullptr,
        scoped_refptr<base::SingleThreadTaskRunner> best_effort_task_runner =

+ 2 - 2
patches/chromium/load_v8_snapshot_in_browser_process.patch

@@ -9,10 +9,10 @@ but due to the nature of electron, we need to load the v8 snapshot
 in the browser process.
 
 diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
-index 93cbe4e3b64d466c24d7b267a802b8c38d034198..7142484a2afd4c3cef4cac613c5f68e3c52e8eab 100644
+index bd44d9c63b506f8e2c126f2bc0054b1d018b9b39..08fa1ff278c0b6b2f804d79234898b90f3d29b29 100644
 --- a/content/app/content_main_runner_impl.cc
 +++ b/content/app/content_main_runner_impl.cc
-@@ -290,11 +290,8 @@ void LoadV8SnapshotFile(const base::CommandLine& command_line) {
+@@ -292,11 +292,8 @@ void LoadV8SnapshotFile(const base::CommandLine& command_line) {
  
  bool ShouldLoadV8Snapshot(const base::CommandLine& command_line,
                            const std::string& process_type) {

+ 87 - 25
patches/chromium/mas_avoid_private_macos_api_usage.patch.patch

@@ -35,10 +35,10 @@ system font by checking if it's kCTFontPriorityAttribute is set to
 system priority.
 
 diff --git a/base/BUILD.gn b/base/BUILD.gn
-index 854457658bbdc09f21f61eb76928dfd423e1eedd..e9443d83d35786b09bc1ff70a0360f6f7e66a42e 100644
+index 9f37a5f18f623c9502c2e2e254df905ba34c9d6c..121c577e0c0c518bd0ae1e5b5aa15cb1c6165315 100644
 --- a/base/BUILD.gn
 +++ b/base/BUILD.gn
-@@ -1028,6 +1028,7 @@ component("base") {
+@@ -1027,6 +1027,7 @@ component("base") {
      "//build:ios_buildflags",
      "//build/config/compiler:compiler_buildflags",
      "//third_party/modp_b64",
@@ -269,7 +269,7 @@ index e9f4e5131238b9fb5f1b4b3e90a0cb84a7fc15b4..8b5f4cae3123ac5480ad73f0c873fca0
  
  }  // namespace
 diff --git a/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm b/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm
-index 19fff43c3daaef5451b6b60b84a610a21311448e..240b954661d34fcc4329d39490be33c485fa8b6e 100644
+index 3a8b44a2a295119f37ca37d5866dfcfa21121db0..b408e9c73fe97dd8885b5479923481e20955cf8d 100644
 --- a/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm
 +++ b/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm
 @@ -9,7 +9,9 @@
@@ -298,7 +298,7 @@ index 19fff43c3daaef5451b6b60b84a610a21311448e..240b954661d34fcc4329d39490be33c4
  + (Class)frameViewClassForStyleMask:(NSUInteger)windowStyle {
    // - NSThemeFrame and its subclasses will be nil if it's missing at runtime.
    if ([BrowserWindowFrame class])
-@@ -165,6 +170,8 @@ - (BOOL)_usesCustomDrawing {
+@@ -163,6 +168,8 @@ - (BOOL)_usesCustomDrawing {
    return NO;
  }
  
@@ -307,7 +307,7 @@ index 19fff43c3daaef5451b6b60b84a610a21311448e..240b954661d34fcc4329d39490be33c4
  // Handle "Move focus to the window toolbar" configured in System Preferences ->
  // Keyboard -> Shortcuts -> Keyboard. Usually Ctrl+F5. The argument (|unknown|)
  // tends to just be nil.
-@@ -175,8 +182,8 @@ - (void)_handleFocusToolbarHotKey:(id)unknown {
+@@ -173,8 +180,8 @@ - (void)_handleFocusToolbarHotKey:(id)unknown {
  }
  
  - (void)setAlwaysShowTrafficLights:(BOOL)alwaysShow {
@@ -474,10 +474,10 @@ index 36c522793dc37f7c72f7cccde50895927b5560cb..689351b5a6e6e6013b808c1b4924b884
    // Beware: This view was briefly removed (in favor of a bare CALayer) in
    // https://crrev.com/c/1236675. The ordering of unassociated layers relative
 diff --git a/components/viz/service/BUILD.gn b/components/viz/service/BUILD.gn
-index 3f1b98692d11116f965fe0eb7e4b6cae308a4f19..6ac941799bda10ce7f93612691a438018160a9dd 100644
+index 6e7ea90385f34b233a0c7beb6647f539ad976169..51fd7f87f0d8b07b1b7f531ff0033976d9327e53 100644
 --- a/components/viz/service/BUILD.gn
 +++ b/components/viz/service/BUILD.gn
-@@ -378,6 +378,7 @@ viz_component("service") {
+@@ -370,6 +370,7 @@ viz_component("service") {
          "frame_sinks/external_begin_frame_source_mac.h",
        ]
      }
@@ -485,7 +485,7 @@ index 3f1b98692d11116f965fe0eb7e4b6cae308a4f19..6ac941799bda10ce7f93612691a43801
    }
  
    if (is_android || use_ozone) {
-@@ -678,6 +679,7 @@ viz_source_set("unit_tests") {
+@@ -670,6 +671,7 @@ viz_source_set("unit_tests") {
        "display_embedder/software_output_device_mac_unittest.mm",
      ]
      frameworks = [ "IOSurface.framework" ]
@@ -545,7 +545,7 @@ index dbf334caa3a6d10017b69ad76802e389a011436b..da828823e8195cc9e497866363c9af93
  
    void ForwardKeyboardEvent(const input::NativeWebKeyboardEvent& key_event,
 diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
-index a76028eed0249244d0559de102a756e3b2771b63..cb65efb56849d57e2e656f90d5b1d737ba2d952d 100644
+index df6ef6912d0ffad09f0c52d68d7b2e4b46c42c2b..ec95982654b0604883ea88141367837a7b861425 100644
 --- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
 +++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
 @@ -35,6 +35,7 @@
@@ -579,10 +579,10 @@ index a76028eed0249244d0559de102a756e3b2771b63..cb65efb56849d57e2e656f90d5b1d737
    return kAttributes;
  }
 diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
-index fec51f705d1a8424fdbff13d33aa6a2b16a650e5..42f5feab06cf2ebb20f851a78111aa952e8bff55 100644
+index 4504187d037a49ea3d3751dc57b997b06207b646..299e56b0f858d54565e1d1f0711002247ce5d790 100644
 --- a/content/browser/BUILD.gn
 +++ b/content/browser/BUILD.gn
-@@ -329,6 +329,7 @@ source_set("browser") {
+@@ -330,6 +330,7 @@ source_set("browser") {
      "//ui/touch_selection",
      "//ui/webui/resources",
      "//v8:v8_version",
@@ -625,7 +625,7 @@ index bea4e26ef8577e8e8bc60287cf1b94c7dfcc9478..eed42b0cbc3422b7fd59ae1b2550c53d
    // Used to force the NSApplication's focused accessibility element to be the
    // content::BrowserAccessibilityCocoa accessibility tree when the NSView for
 diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
-index 9185fd223c9611faee546570c0df36bc94cdb28c..86886e94e9e2c52e297a82175f6071852e792148 100644
+index 430426a0123508a45bf48dcbfb46d1c4dc9d9347..efa697b7c4d428200d14e436ab062c13273916f4 100644
 --- a/content/browser/renderer_host/render_widget_host_view_mac.mm
 +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
 @@ -48,6 +48,7 @@
@@ -647,7 +647,7 @@ index 9185fd223c9611faee546570c0df36bc94cdb28c..86886e94e9e2c52e297a82175f607185
  
    // Reset `ns_view_` before resetting `remote_ns_view_` to avoid dangling
    // pointers. `ns_view_` gets reinitialized later in this method.
-@@ -1616,8 +1619,10 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
+@@ -1622,8 +1625,10 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
  
  gfx::NativeViewAccessible
  RenderWidgetHostViewMac::AccessibilityGetNativeViewAccessibleForWindow() {
@@ -658,7 +658,7 @@ index 9185fd223c9611faee546570c0df36bc94cdb28c..86886e94e9e2c52e297a82175f607185
    return [GetInProcessNSView() window];
  }
  
-@@ -1666,9 +1671,11 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
+@@ -1672,9 +1677,11 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
  }
  
  void RenderWidgetHostViewMac::SetAccessibilityWindow(NSWindow* window) {
@@ -670,7 +670,7 @@ index 9185fd223c9611faee546570c0df36bc94cdb28c..86886e94e9e2c52e297a82175f607185
  }
  
  bool RenderWidgetHostViewMac::SyncIsWidgetForMainFrame(
-@@ -2195,20 +2202,26 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
+@@ -2201,20 +2208,26 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
  void RenderWidgetHostViewMac::GetRenderWidgetAccessibilityToken(
      GetRenderWidgetAccessibilityTokenCallback callback) {
    base::ProcessId pid = getpid();
@@ -792,7 +792,7 @@ index a1068589ad844518038ee7bc15a3de9bc5cba525..1ff781c49f086ec8015c7d3c44567dbe
  
  }  // namespace content
 diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
-index bb9096575a4e362f084d6d612319595f109f27a1..c0eaa67da879637e3adfd948d400ee6487512c00 100644
+index b703520ad916428f73272fba8e435d0e0107434a..7686163233e8c7956d37c08a98acd862577a4bf6 100644
 --- a/content/test/BUILD.gn
 +++ b/content/test/BUILD.gn
 @@ -652,6 +652,7 @@ static_library("test_support") {
@@ -819,7 +819,7 @@ index bb9096575a4e362f084d6d612319595f109f27a1..c0eaa67da879637e3adfd948d400ee64
    ]
  
    if (!(is_chromeos && target_cpu == "arm64" && current_cpu == "arm")) {
-@@ -3222,6 +3225,7 @@ test("content_unittests") {
+@@ -3227,6 +3230,7 @@ test("content_unittests") {
      "//ui/latency:test_support",
      "//ui/shell_dialogs:shell_dialogs",
      "//ui/webui:test_support",
@@ -840,10 +840,10 @@ index 8779cf7cbbe2a583fda51867eaebc627f00bd4cd..98da1587fdc8cc8358a69db2b51d3982
  
    # TODO(crbug.com/40139469): Blink test plugin must be migrated from PPAPI.
 diff --git a/device/bluetooth/BUILD.gn b/device/bluetooth/BUILD.gn
-index af32815b302dff9750a1dcd83b6e03df7d5f2dc9..7f20a6affe68057eb51d3176d7a901c85cacf2e0 100644
+index d27d7140cc55a35e6ffb65028265bcb2ae5932d1..1ea92b29c730aba1c667de83bb98ca85f2046470 100644
 --- a/device/bluetooth/BUILD.gn
 +++ b/device/bluetooth/BUILD.gn
-@@ -258,6 +258,7 @@ component("bluetooth") {
+@@ -253,6 +253,7 @@ component("bluetooth") {
        "IOKit.framework",
        "Foundation.framework",
      ]
@@ -932,10 +932,10 @@ index 36322ddd3047f96569f35807541a37d3c6672b09..0121a780cf3b79fc1120c1b85cd5cd30
  
  namespace ui {
 diff --git a/media/audio/BUILD.gn b/media/audio/BUILD.gn
-index 977aa5b452c882ee69690ba034ec00c9e7ff7e24..3ae3e2ead48ea1af9307dcd12647ca2a24b3a6f4 100644
+index 87126a36725849cbaf478e2dc24dc3a628a30846..a3a88b07af91b86191d9e5727a1d021ebbbb22ce 100644
 --- a/media/audio/BUILD.gn
 +++ b/media/audio/BUILD.gn
-@@ -198,6 +198,7 @@ source_set("audio") {
+@@ -196,6 +196,7 @@ source_set("audio") {
        "CoreMedia.framework",
      ]
      weak_frameworks = [ "ScreenCaptureKit.framework" ]  # macOS 13.0
@@ -1086,6 +1086,68 @@ index 095c639b9893e885d8937e29ed7d47a7c28bc6b6..7e0cf9b9f94b16741358bdb45122f8b2
  }
  
  // |error| is strerror(errno) when a P* logging function is called. Pass
+diff --git a/sandbox/mac/sandbox_serializer.cc b/sandbox/mac/sandbox_serializer.cc
+index 899f231e9bc8e1c76682972dd3f41d4cc38f4868..1da42104cc82cbabfd0c14fdd7025d6963aa50d6 100644
+--- a/sandbox/mac/sandbox_serializer.cc
++++ b/sandbox/mac/sandbox_serializer.cc
+@@ -7,6 +7,7 @@
+ #include <string>
+ #include <vector>
+ 
++#include "electron/mas.h"
+ #include "sandbox/mac/sandbox_logging.h"
+ #include "sandbox/mac/seatbelt.h"
+ 
+@@ -31,6 +32,7 @@ void EncodeVarInt(uint64_t from, std::string* into) {
+   } while (from);
+ }
+ 
++#if !IS_MAS_BUILD()
+ bool DecodeVarInt(std::string_view* from, uint64_t* into) {
+   std::string_view::const_iterator it = from->begin();
+   int shift = 0;
+@@ -49,12 +51,12 @@ bool DecodeVarInt(std::string_view* from, uint64_t* into) {
+   from->remove_prefix(it - from->begin());
+   return true;
+ }
+-
++#endif
+ void EncodeString(const std::string& value, std::string* into) {
+   EncodeVarInt(value.length(), into);
+   into->append(value);
+ }
+-
++#if !IS_MAS_BUILD()
+ bool DecodeString(std::string_view* slice, std::string* value) {
+   uint64_t length;
+   if (!DecodeVarInt(slice, &length) || length < 0) {
+@@ -69,7 +71,7 @@ bool DecodeString(std::string_view* slice, std::string* value) {
+   slice->remove_prefix(size);
+   return true;
+ }
+-
++#endif
+ }  // namespace
+ 
+ SandboxSerializer::SandboxSerializer(Target mode) : mode_(mode) {
+@@ -140,6 +142,7 @@ bool SandboxSerializer::SerializePolicy(std::string& serialized_policy,
+ // static
+ bool SandboxSerializer::ApplySerializedPolicy(
+     const std::string& serialized_policy) {
++#if !IS_MAS_BUILD()
+   std::string_view policy = serialized_policy;
+   uint64_t mode;
+   if (!DecodeVarInt(&policy, &mode)) {
+@@ -201,6 +204,9 @@ bool SandboxSerializer::ApplySerializedPolicy(
+   }
+ 
+   return true;
++#else
++  return true;
++#endif
+ }
+ 
+ }  // namespace sandbox
 diff --git a/sandbox/mac/seatbelt.cc b/sandbox/mac/seatbelt.cc
 index 1960e1c8771fad615a098af09ff1f9a191f67764..29b97b352d08cd1fe73b17fd80cb41cc7e58dcaa 100644
 --- a/sandbox/mac/seatbelt.cc
@@ -1529,7 +1591,7 @@ index 2f7f2a8f81ec0e033cb83f82daac4835a2863cbc..21388d7de99fbb97c79eecbab658934d
  
      if (is_ios) {
 diff --git a/ui/accessibility/platform/browser_accessibility_manager_mac.mm b/ui/accessibility/platform/browser_accessibility_manager_mac.mm
-index 302e40d573b0a102019cb15c0c615f99c7765b1a..a671a0a3de1794ad9a81ddc0f01e615804a6b28b 100644
+index 444f315852deabbac971165a7de9751a1bb367e3..7aba9f251f869c64d7722558084f209bd5d27075 100644
 --- a/ui/accessibility/platform/browser_accessibility_manager_mac.mm
 +++ b/ui/accessibility/platform/browser_accessibility_manager_mac.mm
 @@ -13,6 +13,7 @@
@@ -1611,7 +1673,7 @@ index c8171f0527fe5194f0ea73b57c4444d4c630fbc4..c2ac4da580e3e7f749a0a4de1e859af6
    // Accessible object
    if (AXElementWrapper::IsValidElement(value)) {
 diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn
-index 5ca4c8fc961d24985aa4e0459dc2c42003a5346f..2f5880d1d3fbc3aa1461bbe611c33f789a6f4dde 100644
+index 04702a2c6fec9f84a279e587a59c27c42ae20655..fdda175688baaeabf4991173b4a68ee8fce60d73 100644
 --- a/ui/base/BUILD.gn
 +++ b/ui/base/BUILD.gn
 @@ -363,6 +363,13 @@ component("base") {
@@ -1836,7 +1898,7 @@ index fe3f85073e31de487a08e57d7f9b07aa4eccf8f3..cf5b07203c8bd559a404600cc98cc8ec
      // enough.
      return PlatformFontMac::SystemFontType::kGeneral;
 diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn
-index 94afec13361d4ee8d0441da3cbe37d62e287c94b..fd13add3291b113dc57c69700f35ac9943124786 100644
+index ee47ca61db4c321edce0d6ae49f9f6a21f01918a..c8fcad4a3af57cfb993018f0ad457c271bdefe0e 100644
 --- a/ui/views/BUILD.gn
 +++ b/ui/views/BUILD.gn
 @@ -718,6 +718,8 @@ component("views") {
@@ -1848,7 +1910,7 @@ index 94afec13361d4ee8d0441da3cbe37d62e287c94b..fd13add3291b113dc57c69700f35ac99
    }
  
    if (is_win) {
-@@ -1135,6 +1137,8 @@ source_set("test_support") {
+@@ -1138,6 +1140,8 @@ source_set("test_support") {
      "//ui/base/mojom:ui_base_types",
    ]
  

+ 1 - 1
patches/chromium/network_service_allow_remote_certificate_verification_logic.patch

@@ -7,7 +7,7 @@ This adds a callback from the network service that's used to implement
 session.setCertificateVerifyCallback.
 
 diff --git a/services/network/network_context.cc b/services/network/network_context.cc
-index e74079c81ddad694586647209755fdee9f861317..b7bdda9141ba4ea3c3ab391ec68dff14a4ac717b 100644
+index a26102c62765825a7f94487ea72ca8d3c770060e..014012457bbda884ae6c9eaf46deb7f41e203351 100644
 --- a/services/network/network_context.cc
 +++ b/services/network/network_context.cc
 @@ -159,6 +159,11 @@

+ 1 - 1
patches/chromium/notification_provenance.patch

@@ -133,7 +133,7 @@ index 05d3a12dd84c7005d46cc73b312f97ef418d96f5..4765de982802541b3efc7211d106acc7
        const GURL& document_url,
        const WeakDocumentPtr& weak_document_ptr,
 diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
-index e49a7ccae6e07c60f2c3da927d6abc12d25f50ba..6e5a1fa6af3e0f4d3e9116088bdec5a31f59b29a 100644
+index 37b40579b1c067e9d0412c0b4df7b2f854a76fe1..eeccad9cc76ac28579b3fdb4484e37890919b390 100644
 --- a/content/browser/renderer_host/render_process_host_impl.cc
 +++ b/content/browser/renderer_host/render_process_host_impl.cc
 @@ -2154,7 +2154,7 @@ void RenderProcessHostImpl::CreateNotificationService(

+ 1 - 1
patches/chromium/partially_revert_is_newly_created_to_allow_for_browser_initiated.patch

@@ -10,7 +10,7 @@ an about:blank check to this area.
 Ref: https://chromium-review.googlesource.com/c/chromium/src/+/5403876
 
 diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
-index 90b86b13237a7b8333bd91eae7f50c2e60c71835..c47c5469c1f9f4a99fd8580ffc966d390c2ca672 100644
+index 17a55006539fa252f607755ec5f3e7ed77350c87..7925748c0d712665d05234d455374425340fadab 100644
 --- a/content/browser/renderer_host/render_frame_host_impl.cc
 +++ b/content/browser/renderer_host/render_frame_host_impl.cc
 @@ -799,8 +799,8 @@ void VerifyThatBrowserAndRendererCalculatedOriginsToCommitMatch(

+ 2 - 2
patches/chromium/port_autofill_colors_to_the_color_pipeline.patch

@@ -8,7 +8,7 @@ needed in chromium but our autofill implementation uses them.  This patch can be
 our autofill implementation to work like Chromium's.
 
 diff --git a/ui/color/color_id.h b/ui/color/color_id.h
-index 27eeedaf071213912a67852924e929f47588c1d2..390c2297f7af69e80c2dd1bf5bb03c68e376e5c0 100644
+index f03ca262c4aac9f3e3565b29b6a277ed3dad6580..12a08a9ee0193724d4c88719f6d82692feb59c3b 100644
 --- a/ui/color/color_id.h
 +++ b/ui/color/color_id.h
 @@ -405,6 +405,10 @@
@@ -22,7 +22,7 @@ index 27eeedaf071213912a67852924e929f47588c1d2..390c2297f7af69e80c2dd1bf5bb03c68
    E_CPONLY(kColorSegmentedButtonBorder) \
    E_CPONLY(kColorSegmentedButtonFocus) \
    E_CPONLY(kColorSegmentedButtonForegroundChecked) \
-@@ -512,6 +516,7 @@
+@@ -513,6 +517,7 @@
    E_CPONLY(kColorTreeNodeForeground) \
    E_CPONLY(kColorTreeNodeForegroundSelectedFocused) \
    E_CPONLY(kColorTreeNodeForegroundSelectedUnfocused) \

+ 2 - 2
patches/chromium/printing.patch

@@ -881,10 +881,10 @@ index 97cb6458bc9eec767db89b56abfc5f4b4136ff7b..d9a0b343158b8464b5c9aa8e0e655c0b
    ScriptingThrottler scripting_throttler_;
  
 diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
-index 42f5feab06cf2ebb20f851a78111aa952e8bff55..5048a28983ad629fba2f300f57fd869056fcb510 100644
+index 299e56b0f858d54565e1d1f0711002247ce5d790..3b07b0d4785f4dfc8922286c4e9b172842c0ce67 100644
 --- a/content/browser/BUILD.gn
 +++ b/content/browser/BUILD.gn
-@@ -3085,8 +3085,9 @@ source_set("browser") {
+@@ -3089,8 +3089,9 @@ source_set("browser") {
        "//ppapi/shared_impl",
      ]
  

+ 4 - 4
patches/chromium/refactor_expose_cursor_changes_to_the_webcontentsobserver.patch

@@ -30,10 +30,10 @@ index ecb007b668458da1f8db4fca75f9c4428221dfbf..063007699b5b09ef8e6dbb39e044e4a1
    // RenderWidgetHost on the primary main frame, and false otherwise.
    virtual bool IsWidgetForPrimaryMainFrame(RenderWidgetHostImpl*);
 diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
-index 88d8676fe67a61dfe4c3bfad0a94225d4cae81d3..4d489a14d3f759ca9464c9a594d5800690943119 100644
+index 6bf8d9100658d406bae3d5f346c7c904ea9a3874..e49341203f9de52d7adf3152400f424bde11b0e2 100644
 --- a/content/browser/renderer_host/render_widget_host_impl.cc
 +++ b/content/browser/renderer_host/render_widget_host_impl.cc
-@@ -1997,6 +1997,9 @@ void RenderWidgetHostImpl::SetCursor(const ui::Cursor& cursor) {
+@@ -2024,6 +2024,9 @@ void RenderWidgetHostImpl::SetCursor(const ui::Cursor& cursor) {
    if (view_) {
      view_->UpdateCursor(cursor);
    }
@@ -44,7 +44,7 @@ index 88d8676fe67a61dfe4c3bfad0a94225d4cae81d3..4d489a14d3f759ca9464c9a594d58006
  
  void RenderWidgetHostImpl::ShowContextMenuAtPoint(
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
-index 170e5700311f8f03950bd3b5f6eb2c013bdce3c3..6befbf14c4a95e37a3423be7743655e2fc365a77 100644
+index 104e06b584e9321bc1da4c0913fd36e6cee909ee..bb132ec61070beaae27d583282bc3e9f34f5357b 100644
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
 @@ -5752,6 +5752,11 @@ TextInputManager* WebContentsImpl::GetTextInputManager() {
@@ -60,7 +60,7 @@ index 170e5700311f8f03950bd3b5f6eb2c013bdce3c3..6befbf14c4a95e37a3423be7743655e2
      RenderWidgetHostImpl* render_widget_host) {
    return render_widget_host == GetPrimaryMainFrame()->GetRenderWidgetHost();
 diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
-index fdcb9aafed94e99188aeb2390b673c8ad0e569b0..4855e1eaa8f3b7647aa1610faac40f79e8ce3c93 100644
+index e94f3da32abdb79f6461f55790f4a7474c108eb0..601146957f33f866583243942f7d18ce5a62f492 100644
 --- a/content/browser/web_contents/web_contents_impl.h
 +++ b/content/browser/web_contents/web_contents_impl.h
 @@ -1167,6 +1167,7 @@ class CONTENT_EXPORT WebContentsImpl

+ 3 - 3
patches/chromium/refactor_expose_file_system_access_blocklist.patch

@@ -8,10 +8,10 @@ it in Electron and prevent drift from Chrome's blocklist. We should look for a w
 to upstream this change to Chrome.
 
 diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
-index fbe48d02d70452b1202ddcd23a9a36d50a0b12ae..2d09fefab7dfdb01981803975d4056b8161cbd63 100644
+index 4b91ec38094bad8255e34ae91bfc333183c76d74..9d6773509c41aa13e07e93132cfa524355a2d049 100644
 --- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
 +++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
-@@ -47,7 +47,6 @@
+@@ -45,7 +45,6 @@
  #include "chrome/browser/ui/file_system_access/file_system_access_dangerous_file_dialog.h"
  #include "chrome/browser/ui/file_system_access/file_system_access_dialogs.h"
  #include "chrome/browser/ui/file_system_access/file_system_access_restricted_directory_dialog.h"
@@ -19,7 +19,7 @@ index fbe48d02d70452b1202ddcd23a9a36d50a0b12ae..2d09fefab7dfdb01981803975d4056b8
  #include "chrome/grit/generated_resources.h"
  #include "components/content_settings/core/browser/host_content_settings_map.h"
  #include "components/content_settings/core/common/content_settings.h"
-@@ -253,128 +252,10 @@ bool MaybeIsLocalUNCPath(const base::FilePath& path) {
+@@ -258,128 +257,10 @@ bool MaybeIsLocalUNCPath(const base::FilePath& path) {
  }
  #endif
  

+ 1 - 1
patches/chromium/refactor_expose_hostimportmoduledynamically_and.patch

@@ -7,7 +7,7 @@ Subject: refactor: expose HostImportModuleDynamically and
 This is so that Electron can blend Blink's and Node's implementations of these isolate handlers.
 
 diff --git a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
-index 8754ee3db863e6346b891a7491b997d46644f3c2..ed480f47be04d5df18f01d45488537251ef6bcb6 100644
+index 9ab0efff477274bb08a99a64c2b78226aae1939e..8fbc3cd5328a74b2d65d534d60b0042bf986e2ad 100644
 --- a/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
 +++ b/third_party/blink/renderer/bindings/core/v8/v8_initializer.cc
 @@ -638,7 +638,9 @@ bool WasmJSPromiseIntegrationEnabledCallback(v8::Local<v8::Context> context) {

+ 1 - 1
patches/chromium/refactor_unfilter_unresponsive_events.patch

@@ -15,7 +15,7 @@ This CL removes these filters so the unresponsive event can still be
 accessed from our JS event. The filtering is moved into Electron's code.
 
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
-index 62a4a28afb27c802ce24dd10d941e77cfbca0b02..8caf6addef613d41df3187fef747e9968d0aed37 100644
+index 43476fbb3621ac3a1ca61bed9c5115443f6e255d..50235254ef579fd2851663a12abe6569d00c60c4 100644
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
 @@ -9838,25 +9838,13 @@ void WebContentsImpl::RendererUnresponsive(

+ 5 - 5
patches/chromium/render_widget_host_view_base.patch

@@ -6,10 +6,10 @@ Subject: render_widget_host_view_base.patch
 ... something to do with OSR? and maybe <webview> as well? terrifying.
 
 diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
-index 51f836176bf924de5fc26081d8b968f918181947..641a9c7fa68328e868167cf2fcdfec01643fea18 100644
+index fc70d927f9692334607c178510c6181136c22a8c..04ac54d309e076124a672bbeace285626a0a56e4 100644
 --- a/content/browser/renderer_host/render_widget_host_view_base.cc
 +++ b/content/browser/renderer_host/render_widget_host_view_base.cc
-@@ -639,6 +639,13 @@ void RenderWidgetHostViewBase::OnFrameTokenChangedForView(
+@@ -643,6 +643,13 @@ void RenderWidgetHostViewBase::OnFrameTokenChangedForView(
      host()->DidProcessFrame(frame_token, activation_time);
  }
  
@@ -24,7 +24,7 @@ index 51f836176bf924de5fc26081d8b968f918181947..641a9c7fa68328e868167cf2fcdfec01
      const blink::WebMouseEvent& event,
      const ui::LatencyInfo& latency) {
 diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
-index 2a2edc6063b49a313fb359e99b39cf608c6233d1..96e6777899154e73661fb17184b9727cce2eb0a3 100644
+index 581a829a37786f9e1bd0ec75bbcaa34efc7de64e..39069c8b2f0e0022812d5222a179762f3d04bb44 100644
 --- a/content/browser/renderer_host/render_widget_host_view_base.h
 +++ b/content/browser/renderer_host/render_widget_host_view_base.h
 @@ -29,8 +29,11 @@
@@ -53,7 +53,7 @@ index 2a2edc6063b49a313fb359e99b39cf608c6233d1..96e6777899154e73661fb17184b9727c
  class DelegatedFrameHost;
  class SyntheticGestureTarget;
  
-@@ -145,6 +150,10 @@ class CONTENT_EXPORT RenderWidgetHostViewBase
+@@ -146,6 +151,10 @@ class CONTENT_EXPORT RenderWidgetHostViewBase
    void ProcessGestureEvent(const blink::WebGestureEvent& event,
                             const ui::LatencyInfo& latency) override;
    RenderWidgetHostViewBase* GetRootView() override;
@@ -64,7 +64,7 @@ index 2a2edc6063b49a313fb359e99b39cf608c6233d1..96e6777899154e73661fb17184b9727c
    void OnAutoscrollStart() override;
    const viz::DisplayHitTestQueryMap& GetDisplayHitTestQuery() const override;
  
-@@ -182,6 +191,9 @@ class CONTENT_EXPORT RenderWidgetHostViewBase
+@@ -183,6 +192,9 @@ class CONTENT_EXPORT RenderWidgetHostViewBase
        const gfx::Rect& keyboard_rect) override {}
    bool IsHTMLFormPopup() const override;
  

+ 1 - 1
patches/chromium/render_widget_host_view_mac.patch

@@ -8,7 +8,7 @@ respond to the first mouse click in their window, which is desirable for some
 kinds of utility windows. Similarly for `disableAutoHideCursor`.
 
 diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
-index ccfac3b103824eaa59dbe1e02dcec6c8dbf3f555..a76028eed0249244d0559de102a756e3b2771b63 100644
+index 788a11f06d3912cb50ffc6b493f7266a2eba617b..df6ef6912d0ffad09f0c52d68d7b2e4b46c42c2b 100644
 --- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
 +++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
 @@ -169,6 +169,15 @@ void ExtractUnderlines(NSAttributedString* string,

+ 1 - 1
patches/chromium/resource_file_conflict.patch

@@ -52,7 +52,7 @@ Some alternatives to this patch:
 None of these options seems like a substantial maintainability win over this patch to me (@nornagon).
 
 diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
-index 9bb34fe40f0cc08cb832ee6728ac8e32458c969b..1da9a118fedc612dfed638abba54e69b983d9185 100644
+index ac6836f90875bad6a09e1b1f071fe1e398471723..3973c5f5889b987410c116ac0f75b29df979d5b2 100644
 --- a/chrome/BUILD.gn
 +++ b/chrome/BUILD.gn
 @@ -1546,7 +1546,7 @@ if (is_chrome_branded && !is_android) {

+ 2 - 2
patches/chromium/scroll_bounce_flag.patch

@@ -6,10 +6,10 @@ Subject: scroll_bounce_flag.patch
 Patch to make scrollBounce option work.
 
 diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
-index beb2d175d23f0321dda223e55eced1202fe210e6..c8893809d73546af8b286d0cb8ea114bbb208b8f 100644
+index d7eb65e86ca60744a6d919b2899208978a761e22..e80404d2d0aed8096731895580cc879b8827b3be 100644
 --- a/content/renderer/render_thread_impl.cc
 +++ b/content/renderer/render_thread_impl.cc
-@@ -1300,7 +1300,7 @@ bool RenderThreadImpl::IsLcdTextEnabled() {
+@@ -1306,7 +1306,7 @@ bool RenderThreadImpl::IsLcdTextEnabled() {
  }
  
  bool RenderThreadImpl::IsElasticOverscrollEnabled() {

+ 1 - 1
patches/chromium/support_mixed_sandbox_with_zygote.patch

@@ -22,7 +22,7 @@ However, the patch would need to be reviewed by the security team, as it
 does touch a security-sensitive class.
 
 diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
-index 6e5a1fa6af3e0f4d3e9116088bdec5a31f59b29a..f414b719c6777575796ba009f695030266b41dac 100644
+index eeccad9cc76ac28579b3fdb4484e37890919b390..5c16b2026dcfe1f091b7966a79a5b2498af7b50d 100644
 --- a/content/browser/renderer_host/render_process_host_impl.cc
 +++ b/content/browser/renderer_host/render_process_host_impl.cc
 @@ -1762,6 +1762,10 @@ bool RenderProcessHostImpl::Init() {

+ 2 - 2
patches/chromium/web_contents.patch

@@ -9,7 +9,7 @@ is needed for OSR.
 Originally landed in https://github.com/electron/libchromiumcontent/pull/226.
 
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
-index f943c010b449dd5d941da4f61da3a01ba5e49a8b..a15580413a64b91acba8a3c975c276c119859499 100644
+index 90ac881d8e9f534c875b5eb259b06ef1db1c71d3..08024a20a7c0a227cfaffc77c70874d0a01d6029 100644
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
 @@ -3830,6 +3830,13 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params,
@@ -35,7 +35,7 @@ index f943c010b449dd5d941da4f61da3a01ba5e49a8b..a15580413a64b91acba8a3c975c276c1
    CHECK(view_.get());
  
 diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
-index 5e89cbf0ed5fda4d2d6cb38dcfda3e02bc496d20..0eb1f248423d0308e2205357cc4350cabba04a62 100644
+index 24afa41509becd05d331bccd2452019f90b419d8..bea85663723c7b2d54f6dce11172d9e33e144676 100644
 --- a/content/public/browser/web_contents.h
 +++ b/content/public/browser/web_contents.h
 @@ -116,10 +116,13 @@ class BrowserPluginGuestDelegate;

+ 3 - 3
patches/chromium/webview_fullscreen.patch

@@ -15,10 +15,10 @@ Note that we also need to manually update embedder's
 `api::WebContents::IsFullscreenForTabOrPending` value.
 
 diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
-index a60d567f805ca44dd000527b3bc0c47b163503b7..90b86b13237a7b8333bd91eae7f50c2e60c71835 100644
+index 33088669c478d5b7f6bbaa7998e14479e539c5cc..17a55006539fa252f607755ec5f3e7ed77350c87 100644
 --- a/content/browser/renderer_host/render_frame_host_impl.cc
 +++ b/content/browser/renderer_host/render_frame_host_impl.cc
-@@ -8691,6 +8691,17 @@ void RenderFrameHostImpl::EnterFullscreen(
+@@ -8710,6 +8710,17 @@ void RenderFrameHostImpl::EnterFullscreen(
      }
    }
  
@@ -37,7 +37,7 @@ index a60d567f805ca44dd000527b3bc0c47b163503b7..90b86b13237a7b8333bd91eae7f50c2e
    if (had_fullscreen_token && !GetView()->HasFocus())
      GetView()->Focus();
 diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
-index a15580413a64b91acba8a3c975c276c119859499..5cf853b42371e044197e998bcf91b5cd2350ee43 100644
+index 08024a20a7c0a227cfaffc77c70874d0a01d6029..b3d5c5522ea1afb0a3d3ce076f5e05f34b4ea488 100644
 --- a/content/browser/web_contents/web_contents_impl.cc
 +++ b/content/browser/web_contents/web_contents_impl.cc
 @@ -4099,21 +4099,25 @@ KeyboardEventProcessingResult WebContentsImpl::PreHandleKeyboardEvent(

+ 2 - 2
patches/devtools_frontend/chore_expose_ui_to_allow_electron_to_set_dock_side.patch

@@ -10,10 +10,10 @@ to handle this without patching, but this is fairly clean for now and no longer
 patching legacy devtools code.
 
 diff --git a/front_end/entrypoints/main/MainImpl.ts b/front_end/entrypoints/main/MainImpl.ts
-index 909cdc3c7869dc181f1f0a030a636791e0900845..9f84263d92eaa8276198230bbb8048013dbd5493 100644
+index f622eda941bc2d17cabce7b7e17d3c46e75b5d06..a0de3d8a46d5991c5878e70d0b46f90d3bd52f1c 100644
 --- a/front_end/entrypoints/main/MainImpl.ts
 +++ b/front_end/entrypoints/main/MainImpl.ts
-@@ -787,6 +787,8 @@ export class MainImpl {
+@@ -782,6 +782,8 @@ export class MainImpl {
  globalThis.Main = globalThis.Main || {};
  // @ts-ignore Exported for Tests.js
  globalThis.Main.Main = MainImpl;

+ 1 - 0
patches/node/.patches

@@ -41,3 +41,4 @@ linux_try_preadv64_pwritev64_before_preadv_pwritev_4683.patch
 build_remove_explicit_linker_call_to_libm_on_macos.patch
 build_change_crdtp_protocoltypetraits_signatures_to_avoid_conflict.patch
 test_make_eval_snapshot_tests_more_flexible.patch
+build_option_to_use_custom_inspector_protocol_path.patch

+ 86 - 0
patches/node/build_option_to_use_custom_inspector_protocol_path.patch

@@ -0,0 +1,86 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: deepak1556 <[email protected]>
+Date: Mon, 17 Feb 2025 20:57:05 +0900
+Subject: build: option to use custom inspector_protocol path
+
+This allows building against //third_party/inspector_protocol
+which would align us when building with chromium shared dependencies.
+
+The span changes will be auto-removed when Node.js bumps their
+protocol deps to contain https://chromium-review.googlesource.com/c/v8/v8/+/5996636
+
+Rest of the changes can be upstreamed.
+
+diff --git a/node.gni b/node.gni
+index 203b4abbc44df9e58083c819f61f9025104abdc6..73bf3839866a2652ca660f1117e8f249d33fa46a 100644
+--- a/node.gni
++++ b/node.gni
+@@ -16,6 +16,9 @@ declare_args() {
+   # The location of simdutf - use the one from node's deps by default.
+   node_simdutf_path = "//third_party/simdutf"
+ 
++  # The location of inspector_protocol - use the one from node's deps by default.
++  node_inspector_protocol_path = "//third_party/inspector_protocol"
++
+   # The NODE_MODULE_VERSION defined in node_version.h.
+   node_module_version = exec_script("$node_path/tools/getmoduleversion.py", [], "value")
+ 
+diff --git a/src/inspector/node_json.cc b/src/inspector/node_json.cc
+index d8aacbdf1a8fc858c792ad3ce17ca2f46baebe7e..4625008c048532c2c3340130670647d2877430bd 100644
+--- a/src/inspector/node_json.cc
++++ b/src/inspector/node_json.cc
+@@ -72,7 +72,7 @@ class ValueParserHandler : public ParserHandler {
+ 
+   void HandleBinary(span<uint8_t> bytes) override {
+     AddValueToParent(
+-        BinaryValue::create(Binary::fromSpan(bytes.data(), bytes.size())));
++        BinaryValue::create(Binary::fromSpan(bytes)));
+   }
+ 
+   void HandleDouble(double value) override {
+diff --git a/src/inspector/node_string.h b/src/inspector/node_string.h
+index 08e00f9b94918e3385aed18de80eec5c7ad81095..23e678da55c373400d86e67caec436800531d40d 100644
+--- a/src/inspector/node_string.h
++++ b/src/inspector/node_string.h
+@@ -63,7 +63,7 @@ class Binary {
+   static Binary fromBase64(const std::string_view base64, bool* success) {
+     UNREACHABLE();
+   }
+-  static Binary fromSpan(const uint8_t* data, size_t size) { UNREACHABLE(); }
++  static Binary fromSpan(crdtp::span<const uint8_t> data) { UNREACHABLE(); }
+ };
+ 
+ }  // namespace protocol
+diff --git a/src/inspector/unofficial.gni b/src/inspector/unofficial.gni
+index 3d7aa148678b2646b88fa7c32abec91791b02b82..4810d93eb971b253f7dadff7011a632f6dbe6a2b 100644
+--- a/src/inspector/unofficial.gni
++++ b/src/inspector/unofficial.gni
+@@ -13,7 +13,7 @@ template("inspector_gn_build") {
+   }
+ 
+   node_gen_dir = get_label_info("../..", "target_gen_dir")
+-  protocol_tool_path = "../../deps/inspector_protocol"
++  protocol_tool_path = "$node_inspector_protocol_path"
+ 
+   gypi_values = exec_script(
+       "../../tools/gypi_to_gn.py",
+diff --git a/unofficial.gni b/unofficial.gni
+index cd0eae52ca9bf244e43643a2034fa9d26c4db206..d61a9bd5f4f0c92682f10b449976735859ecbc55 100644
+--- a/unofficial.gni
++++ b/unofficial.gni
+@@ -204,13 +204,14 @@ template("node_gn_build") {
+     }
+     if (node_enable_inspector) {
+       deps += [
+-        "src/inspector:crdtp",
++        "$node_inspector_protocol_path:crdtp",
+         "src/inspector:node_protocol_generated_sources",
+         "src/inspector:v8_inspector_compress_protocol_json",
+       ]
+       include_dirs = [
+         "$target_gen_dir/src",
+         "$target_gen_dir/src/inspector",
++        "$node_inspector_protocol_path",
+       ]
+       node_inspector = exec_script(
+           "./tools/gypi_to_gn.py",

+ 2 - 2
patches/v8/deps_add_v8_object_setinternalfieldfornodecore.patch

@@ -46,10 +46,10 @@ index 3e57ae8efe33f326ef0e5d609c311d4be5b8afd6..dc521d39c2280dfc3217e97c1e413b2b
    V8_INLINE static void* GetAlignedPointerFromInternalField(
        const BasicTracedReference<Object>& object, int index) {
 diff --git a/src/api/api.cc b/src/api/api.cc
-index 6fcf4f9c7e65b7a95f2d7db924695219ac9aaa3e..33b19ff38207909eb83f7f26555c0930b6f37f67 100644
+index 78c7b9f49f30c0897f96b9a7d47e55f632e22715..9e17adc576e3a17a503d980b8219a708ff2f36e9 100644
 --- a/src/api/api.cc
 +++ b/src/api/api.cc
-@@ -6461,14 +6461,33 @@ Local<Data> v8::Object::SlowGetInternalField(int index) {
+@@ -6481,14 +6481,33 @@ Local<Data> v8::Object::SlowGetInternalField(int index) {
        i::Cast<i::JSObject>(*obj)->GetEmbedderField(index), isolate));
  }
  

+ 1 - 1
shell/browser/api/electron_api_base_window.cc

@@ -1142,7 +1142,7 @@ void BaseWindow::SetTitleBarOverlay(const gin_helper::Dictionary& options,
   if (!updated)
     return;
 
-    // If anything was updated, ensure the overlay is repainted.
+  // If anything was updated, ensure the overlay is repainted.
 #if BUILDFLAG(IS_WIN)
   auto* frame_view = static_cast<WinFrameView*>(
       window->widget()->non_client_view()->frame_view());

+ 0 - 2
shell/browser/api/electron_api_printing.cc

@@ -28,8 +28,6 @@ struct Converter<printing::PrinterBasicInfo> {
     dict.Set("name", val.printer_name);
     dict.Set("displayName", val.display_name);
     dict.Set("description", val.printer_description);
-    dict.Set("status", val.printer_status);
-    dict.Set("isDefault", val.is_default ? true : false);
     dict.Set("options", val.options);
     return dict.GetHandle();
   }

+ 1 - 1
shell/browser/api/views/electron_api_image_view.cc

@@ -20,7 +20,7 @@ ImageView::ImageView() : View(new views::ImageView()) {
 ImageView::~ImageView() = default;
 
 void ImageView::SetImage(const gfx::Image& image) {
-  image_view()->SetImage(image.AsImageSkia());
+  image_view()->SetImage(ui::ImageModel::FromImage(image));
 }
 
 // static

+ 3 - 3
shell/browser/browser.h

@@ -210,9 +210,9 @@ class Browser : private WindowListObserver {
   void ApplyForcedRTL();
 
   // Bounce the dock icon.
-  enum class BounceType{
-      kCritical = 0,        // NSCriticalRequest
-      kInformational = 10,  // NSInformationalRequest
+  enum class BounceType {
+    kCritical = 0,        // NSCriticalRequest
+    kInformational = 10,  // NSInformationalRequest
   };
   int DockBounce(BounceType type);
   void DockCancelBounce(int request_id);

+ 1 - 1
shell/browser/ui/cocoa/electron_bundle_mover.mm

@@ -179,7 +179,7 @@ bool AuthorizedInstall(NSString* srcPath, NSString* dstPath, bool* canceled) {
     // longer accessible. If Apple removes the function entirely this will fail
     // gracefully. If they keep the function and throw some sort of exception,
     // this won't fail gracefully, but that's a risk we'll have to take for now.
-    security_AuthorizationExecuteWithPrivileges = (OSStatus(*)(
+    security_AuthorizationExecuteWithPrivileges = (OSStatus (*)(
         AuthorizationRef, const char*, AuthorizationFlags, char* const*,
         FILE**))dlsym(RTLD_DEFAULT, "AuthorizationExecuteWithPrivileges");
   }

+ 5 - 13
shell/browser/ui/views/autofill_popup_view.cc

@@ -27,11 +27,6 @@
 
 namespace electron {
 
-void AutofillPopupChildView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
-  node_data->role = ax::mojom::Role::kMenuItem;
-  node_data->SetName(suggestion_);
-}
-
 BEGIN_METADATA(AutofillPopupChildView)
 END_METADATA
 
@@ -41,6 +36,8 @@ AutofillPopupView::AutofillPopupView(AutofillPopup* popup,
   CreateChildViews();
   SetFocusBehavior(FocusBehavior::ALWAYS);
   set_drag_controller(this);
+  SetAccessibleRole(ax::mojom::Role::kMenu);
+  SetAccessibleName(u"Autofill Menu");
 }
 
 AutofillPopupView::~AutofillPopupView() {
@@ -103,7 +100,7 @@ void AutofillPopupView::Show() {
   auto* host = popup_->frame_host_->GetRenderViewHost()->GetWidget();
   host->AddKeyPressEventCallback(keypress_callback_);
 
-  NotifyAccessibilityEvent(ax::mojom::Event::kMenuStart, true);
+  NotifyAccessibilityEventDeprecated(ax::mojom::Event::kMenuStart, true);
 }
 
 void AutofillPopupView::Hide() {
@@ -114,7 +111,7 @@ void AutofillPopupView::Hide() {
   }
 
   RemoveObserver();
-  NotifyAccessibilityEvent(ax::mojom::Event::kMenuEnd, true);
+  NotifyAccessibilityEventDeprecated(ax::mojom::Event::kMenuEnd, true);
 
   if (GetWidget()) {
     GetWidget()->Close();
@@ -157,7 +154,7 @@ void AutofillPopupView::OnSelectedRowChanged(
     int selected = current_row_selection.value_or(-1);
     if (selected == -1 || static_cast<size_t>(selected) >= children().size())
       return;
-    children().at(selected)->NotifyAccessibilityEvent(
+    children().at(selected)->NotifyAccessibilityEventDeprecated(
         ax::mojom::Event::kSelection, true);
   }
 }
@@ -265,11 +262,6 @@ void AutofillPopupView::OnPaint(gfx::Canvas* canvas) {
   }
 }
 
-void AutofillPopupView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
-  node_data->role = ax::mojom::Role::kMenu;
-  node_data->SetName("Autofill Menu");
-}
-
 void AutofillPopupView::OnMouseCaptureLost() {
   ClearSelection();
 }

+ 2 - 4
shell/browser/ui/views/autofill_popup_view.h

@@ -43,6 +43,8 @@ class AutofillPopupChildView : public views::View {
   explicit AutofillPopupChildView(const std::u16string& suggestion)
       : suggestion_(suggestion) {
     SetFocusBehavior(FocusBehavior::ALWAYS);
+    SetAccessibleRole(ax::mojom::Role::kMenuItem);
+    SetAccessibleName(suggestion);
   }
 
   // disable copy
@@ -52,9 +54,6 @@ class AutofillPopupChildView : public views::View {
  private:
   ~AutofillPopupChildView() override = default;
 
-  // views::Views implementation
-  void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
-
   std::u16string suggestion_;
 };
 
@@ -103,7 +102,6 @@ class AutofillPopupView : public views::WidgetDelegateView,
 
   // views::Views implementation.
   void OnPaint(gfx::Canvas* canvas) override;
-  void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
   void OnMouseCaptureLost() override;
   bool OnMouseDragged(const ui::MouseEvent& event) override;
   void OnMouseExited(const ui::MouseEvent& event) override;

+ 6 - 6
shell/browser/ui/views/global_menu_bar_x11.cc

@@ -29,23 +29,23 @@ using dbusmenu_menuitem_new_func = DbusmenuMenuitem* (*)();
 using dbusmenu_menuitem_new_with_id_func = DbusmenuMenuitem* (*)(int id);
 
 using dbusmenu_menuitem_get_id_func = int (*)(DbusmenuMenuitem* item);
-using dbusmenu_menuitem_get_children_func = GList* (*)(DbusmenuMenuitem* item);
+using dbusmenu_menuitem_get_children_func = GList* (*)(DbusmenuMenuitem * item);
 using dbusmenu_menuitem_child_append_func =
-    DbusmenuMenuitem* (*)(DbusmenuMenuitem* parent, DbusmenuMenuitem* child);
+    DbusmenuMenuitem* (*)(DbusmenuMenuitem * parent, DbusmenuMenuitem* child);
 using dbusmenu_menuitem_property_set_func =
-    DbusmenuMenuitem* (*)(DbusmenuMenuitem* item,
+    DbusmenuMenuitem* (*)(DbusmenuMenuitem * item,
                           const char* property,
                           const char* value);
 using dbusmenu_menuitem_property_set_variant_func =
-    DbusmenuMenuitem* (*)(DbusmenuMenuitem* item,
+    DbusmenuMenuitem* (*)(DbusmenuMenuitem * item,
                           const char* property,
                           GVariant* value);
 using dbusmenu_menuitem_property_set_bool_func =
-    DbusmenuMenuitem* (*)(DbusmenuMenuitem* item,
+    DbusmenuMenuitem* (*)(DbusmenuMenuitem * item,
                           const char* property,
                           bool value);
 using dbusmenu_menuitem_property_set_int_func =
-    DbusmenuMenuitem* (*)(DbusmenuMenuitem* item,
+    DbusmenuMenuitem* (*)(DbusmenuMenuitem * item,
                           const char* property,
                           int value);
 

+ 3 - 5
shell/browser/ui/views/menu_bar.cc

@@ -43,6 +43,9 @@ MenuBar::MenuBar(NativeWindow* window, RootView* root_view)
   SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kHorizontal));
   window_->AddObserver(this);
+  SetAccessibleName(std::u16string(),
+                    ax::mojom::NameFrom::kAttributeExplicitlyEmpty);
+  SetAccessibleRole(ax::mojom::Role::kMenuBar);
 }
 
 MenuBar::~MenuBar() {
@@ -123,11 +126,6 @@ void MenuBar::OnWindowFocus() {
   SetAcceleratorVisibility(pane_has_focus());
 }
 
-void MenuBar::GetAccessibleNodeData(ui::AXNodeData* node_data) {
-  node_data->SetNameExplicitlyEmpty();
-  node_data->role = ax::mojom::Role::kMenuBar;
-}
-
 bool MenuBar::AcceleratorPressed(const ui::Accelerator& accelerator) {
   // Treat pressing Alt the same as pressing Esc.
   const ui::Accelerator& translated =

+ 0 - 3
shell/browser/ui/views/menu_bar.h

@@ -73,9 +73,6 @@ class MenuBar : public views::AccessiblePaneView,
   // views::FocusChangeListener:
   void OnDidChangeFocus(View* focused_before, View* focused_now) override;
 
-  // views::View:
-  void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
-
   void ButtonPressed(size_t id, const ui::Event& event);
 
   void RebuildChildren();

+ 1 - 6
shell/browser/ui/views/submenu_button.cc

@@ -26,7 +26,7 @@ SubmenuButton::SubmenuButton(PressedCallback callback,
   // Dont' use native style border.
   SetBorder(CreateDefaultBorder());
 #endif
-
+  SetAccessibleRole(ax::mojom::Role::kPopUpButton);
   if (GetUnderlinePosition(title, &accelerator_, &underline_start_,
                            &underline_end_))
     gfx::Canvas::SizeStringInt(GetText(), gfx::FontList(), &text_width_,
@@ -53,11 +53,6 @@ void SubmenuButton::SetUnderlineColor(SkColor color) {
   underline_color_ = color;
 }
 
-void SubmenuButton::GetAccessibleNodeData(ui::AXNodeData* node_data) {
-  node_data->role = ax::mojom::Role::kPopUpButton;
-  node_data->SetName(GetAccessibleName());
-}
-
 void SubmenuButton::PaintButtonContents(gfx::Canvas* canvas) {
   views::MenuButton::PaintButtonContents(canvas);
 

+ 0 - 3
shell/browser/ui/views/submenu_button.h

@@ -36,9 +36,6 @@ class SubmenuButton : public views::MenuButton {
 
   char16_t accelerator() const { return accelerator_; }
 
-  // views::MenuButton:
-  void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
-
   void PaintButtonContents(gfx::Canvas* canvas) override;
 
  private: