Browse Source

chore: remove patch that's already upstreamed (#45838)

* chore: remove check_for_unit_to_activate_before_notifying_about_success.patch

This is already in 134.0.6998.23, we do not need to cherry-pick it

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

* chore: e patches all
Charles Kerr 1 month ago
parent
commit
260933601e
27 changed files with 67 additions and 565 deletions
  1. 0 1
      patches/chromium/.patches
  2. 2 2
      patches/chromium/add_didinstallconditionalfeatures.patch
  3. 1 1
      patches/chromium/allow_disabling_blink_scheduler_throttling_per_renderview.patch
  4. 4 4
      patches/chromium/build_do_not_depend_on_packed_resource_integrity.patch
  5. 7 7
      patches/chromium/can_create_window.patch
  6. 0 497
      patches/chromium/check_for_unit_to_activate_before_notifying_about_success.patch
  7. 1 1
      patches/chromium/chore_partial_revert_of.patch
  8. 1 1
      patches/chromium/chore_provide_iswebcontentscreationoverridden_with_full_params.patch
  9. 1 1
      patches/chromium/disable_compositor_recycling.patch
  10. 4 4
      patches/chromium/disable_hidden.patch
  11. 2 2
      patches/chromium/fix_crash_loading_non-standard_schemes_in_iframes.patch
  12. 4 4
      patches/chromium/fix_drag_and_drop_icons_on_windows.patch
  13. 5 5
      patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch
  14. 2 2
      patches/chromium/fix_restore_original_resize_performance_on_macos.patch
  15. 1 1
      patches/chromium/fix_return_v8_value_from_localframe_requestexecutescript.patch
  16. 2 2
      patches/chromium/frame_host_manager.patch
  17. 2 2
      patches/chromium/gritsettings_resource_ids.patch
  18. 6 6
      patches/chromium/mas_avoid_private_macos_api_usage.patch.patch
  19. 1 1
      patches/chromium/notification_provenance.patch
  20. 1 1
      patches/chromium/partially_revert_is_newly_created_to_allow_for_browser_initiated.patch
  21. 4 4
      patches/chromium/refactor_expose_cursor_changes_to_the_webcontentsobserver.patch
  22. 1 1
      patches/chromium/refactor_expose_file_system_access_blocklist.patch
  23. 1 1
      patches/chromium/refactor_unfilter_unresponsive_events.patch
  24. 5 5
      patches/chromium/render_widget_host_view_base.patch
  25. 4 4
      patches/chromium/revert_code_health_clean_up_stale_macwebcontentsocclusion.patch
  26. 2 2
      patches/chromium/web_contents.patch
  27. 3 3
      patches/chromium/webview_fullscreen.patch

+ 0 - 1
patches/chromium/.patches

@@ -145,4 +145,3 @@ ignore_parse_errors_for_pkey_appusermodel_toastactivatorclsid.patch
 fix_win32_synchronous_spellcheck.patch
 fix_drag_and_drop_icons_on_windows.patch
 chore_remove_conflicting_allow_unsafe_libc_calls.patch
-check_for_unit_to_activate_before_notifying_about_success.patch

+ 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);
  }
  

+ 1 - 1
patches/chromium/allow_disabling_blink_scheduler_throttling_per_renderview.patch

@@ -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 92085aca6bd0c95a73b98e4173c0128d596b77f4..9503beefcbcfe7d99674582ece10a7e551fae96d 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) {

+ 4 - 4
patches/chromium/build_do_not_depend_on_packed_resource_integrity.patch

@@ -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 c56a3502fd364356b6a014764eeda80ada812932..7386010cbfc6e9d29d636329bdcc160fc24cf042 100644
 --- a/chrome/test/BUILD.gn
 +++ b/chrome/test/BUILD.gn
-@@ -7000,9 +7000,12 @@ test("unit_tests") {
+@@ -7001,9 +7001,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") {
+@@ -7961,6 +7964,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") {
+@@ -8021,7 +8028,6 @@ test("unit_tests") {
      # Non-android deps for "unit_tests" target.
      deps += [
        "../browser/screen_ai:screen_ai_install_state",

+ 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 622142dcf64df8bf50a6ae5448fdf97c097e49c6..be846f0ff4d960d7d26071f4d3c9c34a3d99f233 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(
+@@ -9605,6 +9605,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 94917dc412682c04086cb6d2971209e660f406dc..61d09271ab44bbe4f19cfe7c5cf5b21c002d967e 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 28c64640717f499227786f661336557b9eede5d0..1e059a7f69c498d94a4e35b42ced76802e30575d 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 - 497
patches/chromium/check_for_unit_to_activate_before_notifying_about_success.patch

@@ -1,497 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Maksim Sisov <[email protected]>
-Date: Tue, 7 Jan 2025 23:46:56 -0800
-Subject: Check for unit to activate before notifying about success
-
-Portal's globalShortcuts interface relies on the unit name to
-properly assign a client for the bound commands. However, in
-some scenarious, there is a race between the service to be
-created, changed its name and activated. As a result, shortcuts
-might be bound before the name is changed. As a result, shortcuts
-might not correctly work and the client will not receive any
-signals.
-
-This is mostly not an issue for Chromium as it creates the
-global shortcuts portal linux object way earlier than it gets
-commands from the command service. But downstream project, which
-try to bind shortcuts at the same time as that instance is created,
-may experience this issue. As a result, they might not have
-shortcuts working correctly after system reboot or app restart as
-there is a race between those operations.
-
-Bug: None
-Change-Id: I8346d65e051d9587850c76ca0b8807669c161667
-Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6110782
-Reviewed-by: Thomas Anderson <[email protected]>
-Commit-Queue: Maksim Sisov <[email protected]>
-Cr-Commit-Position: refs/heads/main@{#1403434}
-
-diff --git a/components/dbus/xdg/systemd.cc b/components/dbus/xdg/systemd.cc
-index 362a16447bf578923cb8a84674c277ae6c98228f..3cd9a55d540c07a4c53f5a62bec5cbea37c11838 100644
---- a/components/dbus/xdg/systemd.cc
-+++ b/components/dbus/xdg/systemd.cc
-@@ -4,9 +4,12 @@
- 
- #include "components/dbus/xdg/systemd.h"
- 
-+#include <string>
- #include <vector>
- 
- #include "base/environment.h"
-+#include "base/functional/bind.h"
-+#include "base/functional/callback_helpers.h"
- #include "base/memory/scoped_refptr.h"
- #include "base/no_destructor.h"
- #include "base/sequence_checker.h"
-@@ -17,7 +20,9 @@
- #include "components/dbus/utils/name_has_owner.h"
- #include "dbus/bus.h"
- #include "dbus/message.h"
-+#include "dbus/object_path.h"
- #include "dbus/object_proxy.h"
-+#include "dbus/property.h"
- #include "third_party/abseil-cpp/absl/types/variant.h"
- 
- namespace dbus_xdg {
-@@ -37,6 +42,10 @@ constexpr char kServiceNameSystemd[] = "org.freedesktop.systemd1";
- constexpr char kObjectPathSystemd[] = "/org/freedesktop/systemd1";
- constexpr char kInterfaceSystemdManager[] = "org.freedesktop.systemd1.Manager";
- constexpr char kMethodStartTransientUnit[] = "StartTransientUnit";
-+constexpr char kMethodGetUnit[] = "GetUnit";
-+
-+constexpr char kInterfaceSystemdUnit[] = "org.freedesktop.systemd1.Unit";
-+constexpr char kActiveStateProp[] = "ActiveState";
- 
- constexpr char kUnitNameFormat[] = "app-$1$2-$3.scope";
- 
-@@ -67,6 +76,81 @@ const char* GetAppNameSuffix(const std::string& channel) {
-   return "";
- }
- 
-+// Declare this helper for SystemdUnitActiveStateWatcher to be used.
-+void SetStateAndRunCallbacks(SystemdUnitStatus result);
-+
-+// Watches the object to become active and fires callbacks via
-+// SetStateAndRunCallbacks. The callbacks are fired whenever a response with the
-+// state being "active" or "failed" (or similar) comes.
-+//
-+// PS firing callbacks results in destroying this object. So any references
-+// to this become invalid.
-+class SystemdUnitActiveStateWatcher : public dbus::PropertySet {
-+ public:
-+  SystemdUnitActiveStateWatcher(scoped_refptr<dbus::Bus> bus,
-+                                dbus::ObjectProxy* object_proxy)
-+      : dbus::PropertySet(object_proxy,
-+                          kInterfaceSystemdUnit,
-+                          base::BindRepeating(
-+                              &SystemdUnitActiveStateWatcher::OnPropertyChanged,
-+                              base::Unretained(this))),
-+        bus_(bus) {
-+    RegisterProperty(kActiveStateProp, &active_state_);
-+    ConnectSignals();
-+    GetAll();
-+  }
-+
-+  ~SystemdUnitActiveStateWatcher() override {
-+    bus_->RemoveObjectProxy(kServiceNameSystemd, object_proxy()->object_path(),
-+                            base::DoNothing());
-+  }
-+
-+ private:
-+  void OnPropertyChanged(const std::string& property_name) {
-+    DCHECK(active_state_.is_valid());
-+    const std::string state_value = active_state_.value();
-+    if (callbacks_called_ || state_value == "activating" ||
-+        state_value == "reloading") {
-+      // Ignore if callbacks have already been fired or continue waiting until
-+      // the state changes to something else.
-+      return;
-+    }
-+
-+    // There are other states as failed, inactive, and deactivating. Treat all
-+    // of them as failed.
-+    callbacks_called_ = true;
-+    SetStateAndRunCallbacks(state_value == "active"
-+                                ? SystemdUnitStatus::kUnitStarted
-+                                : SystemdUnitStatus::kFailedToStart);
-+    MaybeDeleteSelf();
-+  }
-+
-+  void OnGetAll(dbus::Response* response) override {
-+    dbus::PropertySet::OnGetAll(response);
-+    keep_alive_ = false;
-+    MaybeDeleteSelf();
-+  }
-+
-+  void MaybeDeleteSelf() {
-+    if (!keep_alive_ && callbacks_called_) {
-+      delete this;
-+    }
-+  }
-+
-+  // Registered property that this listens updates to.
-+  dbus::Property<std::string> active_state_;
-+
-+  // Indicates whether callbacks for the unit's state have been called.
-+  bool callbacks_called_ = false;
-+
-+  // Control variable that helps to defer the destruction of |this| as deleting
-+  // self when the state changes to active during |OnGetAll| will result in a
-+  // segfault.
-+  bool keep_alive_ = true;
-+
-+  scoped_refptr<dbus::Bus> bus_;
-+};
-+
- // Global state for cached result or pending callbacks.
- StatusOrCallbacks& GetUnitNameState() {
-   static base::NoDestructor<StatusOrCallbacks> state(
-@@ -83,10 +167,52 @@ void SetStateAndRunCallbacks(SystemdUnitStatus result) {
-   }
- }
- 
--void OnStartTransientUnitResponse(dbus::Response* response) {
-+void OnGetPathResponse(scoped_refptr<dbus::Bus> bus, dbus::Response* response) {
-+  dbus::MessageReader reader(response);
-+  dbus::ObjectPath obj_path;
-+  if (!response || !reader.PopObjectPath(&obj_path) || !obj_path.IsValid()) {
-+    // We didn't get a valid response. Treat this as failed service.
-+    SetStateAndRunCallbacks(SystemdUnitStatus::kFailedToStart);
-+    return;
-+  }
-+
-+  dbus::ObjectProxy* unit_proxy =
-+      bus->GetObjectProxy(kServiceNameSystemd, obj_path);
-+  // Create the active state property watcher. It will destroy itself once
-+  // it gets notified about the state change.
-+  std::unique_ptr<SystemdUnitActiveStateWatcher> active_state_watcher =
-+      std::make_unique<SystemdUnitActiveStateWatcher>(bus, unit_proxy);
-+  active_state_watcher.release();
-+}
-+
-+void WaitUnitActivateAndRunCallbacks(scoped_refptr<dbus::Bus> bus,
-+                                     std::string unit_name) {
-+  // Get the path of the unit, which looks similar to
-+  // /org/freedesktop/systemd1/unit/app_2dorg_2echromium_2eChromium_2d3182191_2escope
-+  // and then wait for it activation.
-+  dbus::ObjectProxy* systemd = bus->GetObjectProxy(
-+      kServiceNameSystemd, dbus::ObjectPath(kObjectPathSystemd));
-+
-+  dbus::MethodCall method_call(kInterfaceSystemdManager, kMethodGetUnit);
-+  dbus::MessageWriter writer(&method_call);
-+  writer.AppendString(unit_name);
-+
-+  systemd->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
-+                      base::BindOnce(&OnGetPathResponse, std::move(bus)));
-+}
-+
-+void OnStartTransientUnitResponse(scoped_refptr<dbus::Bus> bus,
-+                                  std::string unit_name,
-+                                  dbus::Response* response) {
-   SystemdUnitStatus result = response ? SystemdUnitStatus::kUnitStarted
-                                       : SystemdUnitStatus::kFailedToStart;
--  SetStateAndRunCallbacks(result);
-+  // If the start of the unit failed, immediately notify the client. Otherwise,
-+  // wait for its activation.
-+  if (result == SystemdUnitStatus::kFailedToStart) {
-+    SetStateAndRunCallbacks(result);
-+  } else {
-+    WaitUnitActivateAndRunCallbacks(std::move(bus), unit_name);
-+  }
- }
- 
- void OnNameHasOwnerResponse(scoped_refptr<dbus::Bus> bus,
-@@ -128,8 +254,9 @@ void OnNameHasOwnerResponse(scoped_refptr<dbus::Bus> bus,
-   properties.Write(&writer);
-   // No auxiliary units.
-   Dict<VarDict>().Write(&writer);
--  systemd->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
--                      base::BindOnce(&OnStartTransientUnitResponse));
-+  systemd->CallMethod(
-+      &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
-+      base::BindOnce(&OnStartTransientUnitResponse, std::move(bus), unit_name));
- }
- 
- }  // namespace
-diff --git a/components/dbus/xdg/systemd_unittest.cc b/components/dbus/xdg/systemd_unittest.cc
-index 2e3baecabc4b479000c78d4f6bd30cb1f6e61d2e..67278d7033664d52fbbda02749a2aaa43352f402 100644
---- a/components/dbus/xdg/systemd_unittest.cc
-+++ b/components/dbus/xdg/systemd_unittest.cc
-@@ -16,7 +16,9 @@
- #include "dbus/message.h"
- #include "dbus/mock_bus.h"
- #include "dbus/mock_object_proxy.h"
-+#include "dbus/object_path.h"
- #include "dbus/object_proxy.h"
-+#include "dbus/property.h"
- #include "testing/gmock/include/gmock/gmock.h"
- #include "testing/gtest/include/gtest/gtest.h"
- 
-@@ -32,6 +34,27 @@ constexpr char kServiceNameSystemd[] = "org.freedesktop.systemd1";
- constexpr char kObjectPathSystemd[] = "/org/freedesktop/systemd1";
- constexpr char kInterfaceSystemdManager[] = "org.freedesktop.systemd1.Manager";
- constexpr char kMethodStartTransientUnit[] = "StartTransientUnit";
-+constexpr char kMethodGetUnit[] = "GetUnit";
-+
-+constexpr char kFakeUnitPath[] = "/fake/unit/path";
-+constexpr char kActiveState[] = "ActiveState";
-+constexpr char kStateActive[] = "active";
-+constexpr char kStateInactive[] = "inactive";
-+
-+std::unique_ptr<dbus::Response> CreateActiveStateGetAllResponse(
-+    const std::string& state) {
-+  auto response = dbus::Response::CreateEmpty();
-+  dbus::MessageWriter writer(response.get());
-+  dbus::MessageWriter array_writer(nullptr);
-+  dbus::MessageWriter dict_entry_writer(nullptr);
-+  writer.OpenArray("{sv}", &array_writer);
-+  array_writer.OpenDictEntry(&dict_entry_writer);
-+  dict_entry_writer.AppendString(kActiveState);
-+  dict_entry_writer.AppendVariantOfString(state);
-+  array_writer.CloseContainer(&dict_entry_writer);
-+  writer.CloseContainer(&array_writer);
-+  return response;
-+}
- 
- class SetSystemdScopeUnitNameForXdgPortalTest : public ::testing::Test {
-  public:
-@@ -124,17 +147,48 @@ TEST_F(SetSystemdScopeUnitNameForXdgPortalTest, StartTransientUnitSuccess) {
- 
-   EXPECT_CALL(*bus, GetObjectProxy(kServiceNameSystemd,
-                                    dbus::ObjectPath(kObjectPathSystemd)))
--      .WillOnce(Return(mock_systemd_proxy.get()));
-+      .Times(2)
-+      .WillRepeatedly(Return(mock_systemd_proxy.get()));
-+
-+  auto mock_dbus_unit_proxy = base::MakeRefCounted<dbus::MockObjectProxy>(
-+      bus.get(), kServiceNameSystemd, dbus::ObjectPath(kFakeUnitPath));
-+  EXPECT_CALL(*bus, GetObjectProxy(kServiceNameSystemd,
-+                                   dbus::ObjectPath(kFakeUnitPath)))
-+      .WillOnce(Return(mock_dbus_unit_proxy.get()));
- 
-   EXPECT_CALL(*mock_systemd_proxy, DoCallMethod(_, _, _))
-       .WillOnce(Invoke([](dbus::MethodCall* method_call, int timeout_ms,
-                           dbus::ObjectProxy::ResponseCallback* callback) {
-+        // Expect kMethodStartTransientUnit first.
-         EXPECT_EQ(method_call->GetInterface(), kInterfaceSystemdManager);
-         EXPECT_EQ(method_call->GetMember(), kMethodStartTransientUnit);
- 
-         // Simulate a successful response
-         auto response = dbus::Response::CreateEmpty();
-         std::move(*callback).Run(response.get());
-+      }))
-+      .WillOnce(Invoke([obj_path = kFakeUnitPath](
-+                           dbus::MethodCall* method_call, int timeout_ms,
-+                           dbus::ObjectProxy::ResponseCallback* callback) {
-+        // Then expect kMethodGetUnit. A valid path must be provided.
-+        EXPECT_EQ(method_call->GetInterface(), kInterfaceSystemdManager);
-+        EXPECT_EQ(method_call->GetMember(), kMethodGetUnit);
-+
-+        // Simulate a successful response and provide a fake path to the object.
-+        auto response = dbus::Response::CreateEmpty();
-+        dbus::MessageWriter writer(response.get());
-+        writer.AppendObjectPath(dbus::ObjectPath(obj_path));
-+        std::move(*callback).Run(response.get());
-+      }));
-+
-+  EXPECT_CALL(*mock_dbus_unit_proxy, DoCallMethod(_, _, _))
-+      .WillOnce(Invoke([](dbus::MethodCall* method_call, int timeout_ms,
-+                          dbus::ObjectProxy::ResponseCallback* callback) {
-+        EXPECT_EQ(method_call->GetInterface(), dbus::kPropertiesInterface);
-+        EXPECT_EQ(method_call->GetMember(), dbus::kPropertiesGetAll);
-+        // Simulate a successful response with "active" state.
-+        auto response = CreateActiveStateGetAllResponse(kStateActive);
-+        std::move(*callback).Run(response.get());
-       }));
- 
-   std::optional<SystemdUnitStatus> status;
-@@ -189,6 +243,142 @@ TEST_F(SetSystemdScopeUnitNameForXdgPortalTest, StartTransientUnitFailure) {
-   EXPECT_EQ(status, SystemdUnitStatus::kFailedToStart);
- }
- 
-+TEST_F(SetSystemdScopeUnitNameForXdgPortalTest,
-+       StartTransientUnitInvalidUnitPath) {
-+  scoped_refptr<dbus::MockBus> bus =
-+      base::MakeRefCounted<dbus::MockBus>(dbus::Bus::Options());
-+
-+  auto mock_dbus_proxy = base::MakeRefCounted<dbus::MockObjectProxy>(
-+      bus.get(), DBUS_SERVICE_DBUS, dbus::ObjectPath(DBUS_PATH_DBUS));
-+
-+  EXPECT_CALL(
-+      *bus, GetObjectProxy(DBUS_SERVICE_DBUS, dbus::ObjectPath(DBUS_PATH_DBUS)))
-+      .WillRepeatedly(Return(mock_dbus_proxy.get()));
-+
-+  EXPECT_CALL(*mock_dbus_proxy, DoCallMethod(_, _, _))
-+      .WillOnce(Invoke([](dbus::MethodCall* method_call, int timeout_ms,
-+                          dbus::ObjectProxy::ResponseCallback* callback) {
-+        auto response = dbus::Response::CreateEmpty();
-+        dbus::MessageWriter writer(response.get());
-+        writer.AppendBool(true);
-+        std::move(*callback).Run(response.get());
-+      }));
-+
-+  auto mock_systemd_proxy = base::MakeRefCounted<dbus::MockObjectProxy>(
-+      bus.get(), kServiceNameSystemd, dbus::ObjectPath(kObjectPathSystemd));
-+
-+  EXPECT_CALL(*bus, GetObjectProxy(kServiceNameSystemd,
-+                                   dbus::ObjectPath(kObjectPathSystemd)))
-+      .Times(2)
-+      .WillRepeatedly(Return(mock_systemd_proxy.get()));
-+
-+  EXPECT_CALL(*mock_systemd_proxy, DoCallMethod(_, _, _))
-+      .WillOnce(Invoke([](dbus::MethodCall* method_call, int timeout_ms,
-+                          dbus::ObjectProxy::ResponseCallback* callback) {
-+        EXPECT_EQ(method_call->GetInterface(), kInterfaceSystemdManager);
-+        EXPECT_EQ(method_call->GetMember(), kMethodStartTransientUnit);
-+
-+        // Simulate a successful response
-+        auto response = dbus::Response::CreateEmpty();
-+        std::move(*callback).Run(response.get());
-+      }))
-+      .WillOnce(Invoke([](dbus::MethodCall* method_call, int timeout_ms,
-+                          dbus::ObjectProxy::ResponseCallback* callback) {
-+        EXPECT_EQ(method_call->GetInterface(), kInterfaceSystemdManager);
-+        EXPECT_EQ(method_call->GetMember(), kMethodGetUnit);
-+
-+        // Simulate a failure response.
-+        std::move(*callback).Run(nullptr);
-+      }));
-+
-+  std::optional<SystemdUnitStatus> status;
-+
-+  SetSystemdScopeUnitNameForXdgPortal(
-+      bus.get(), base::BindLambdaForTesting(
-+                     [&](SystemdUnitStatus result) { status = result; }));
-+
-+  EXPECT_EQ(status, SystemdUnitStatus::kFailedToStart);
-+}
-+
-+TEST_F(SetSystemdScopeUnitNameForXdgPortalTest,
-+       StartTransientUnitFailToActivate) {
-+  scoped_refptr<dbus::MockBus> bus =
-+      base::MakeRefCounted<dbus::MockBus>(dbus::Bus::Options());
-+
-+  auto mock_dbus_proxy = base::MakeRefCounted<dbus::MockObjectProxy>(
-+      bus.get(), DBUS_SERVICE_DBUS, dbus::ObjectPath(DBUS_PATH_DBUS));
-+
-+  EXPECT_CALL(
-+      *bus, GetObjectProxy(DBUS_SERVICE_DBUS, dbus::ObjectPath(DBUS_PATH_DBUS)))
-+      .WillRepeatedly(Return(mock_dbus_proxy.get()));
-+
-+  EXPECT_CALL(*mock_dbus_proxy, DoCallMethod(_, _, _))
-+      .WillOnce(Invoke([](dbus::MethodCall* method_call, int timeout_ms,
-+                          dbus::ObjectProxy::ResponseCallback* callback) {
-+        auto response = dbus::Response::CreateEmpty();
-+        dbus::MessageWriter writer(response.get());
-+        writer.AppendBool(true);
-+        std::move(*callback).Run(response.get());
-+      }));
-+
-+  auto mock_systemd_proxy = base::MakeRefCounted<dbus::MockObjectProxy>(
-+      bus.get(), kServiceNameSystemd, dbus::ObjectPath(kObjectPathSystemd));
-+
-+  EXPECT_CALL(*bus, GetObjectProxy(kServiceNameSystemd,
-+                                   dbus::ObjectPath(kObjectPathSystemd)))
-+      .Times(2)
-+      .WillRepeatedly(Return(mock_systemd_proxy.get()));
-+
-+  auto mock_dbus_unit_proxy = base::MakeRefCounted<dbus::MockObjectProxy>(
-+      bus.get(), kServiceNameSystemd, dbus::ObjectPath(kFakeUnitPath));
-+  EXPECT_CALL(*bus, GetObjectProxy(kServiceNameSystemd,
-+                                   dbus::ObjectPath(kFakeUnitPath)))
-+      .WillOnce(Return(mock_dbus_unit_proxy.get()));
-+
-+  EXPECT_CALL(*mock_systemd_proxy, DoCallMethod(_, _, _))
-+      .WillOnce(Invoke([](dbus::MethodCall* method_call, int timeout_ms,
-+                          dbus::ObjectProxy::ResponseCallback* callback) {
-+        EXPECT_EQ(method_call->GetInterface(), kInterfaceSystemdManager);
-+        EXPECT_EQ(method_call->GetMember(), kMethodStartTransientUnit);
-+
-+        // Simulate a successful response
-+        auto response = dbus::Response::CreateEmpty();
-+        std::move(*callback).Run(response.get());
-+      }))
-+      .WillOnce(Invoke([obj_path = kFakeUnitPath](
-+                           dbus::MethodCall* method_call, int timeout_ms,
-+                           dbus::ObjectProxy::ResponseCallback* callback) {
-+        EXPECT_EQ(method_call->GetInterface(), kInterfaceSystemdManager);
-+        EXPECT_EQ(method_call->GetMember(), kMethodGetUnit);
-+
-+        // Simulate a successful response
-+        auto response = dbus::Response::CreateEmpty();
-+        dbus::MessageWriter writer(response.get());
-+        writer.AppendObjectPath(dbus::ObjectPath(obj_path));
-+        std::move(*callback).Run(response.get());
-+      }));
-+
-+  EXPECT_CALL(*mock_dbus_unit_proxy, DoCallMethod(_, _, _))
-+      .WillOnce(Invoke([](dbus::MethodCall* method_call, int timeout_ms,
-+                          dbus::ObjectProxy::ResponseCallback* callback) {
-+        // Then expect kMethodGetUnit. A valid path must be provided.
-+        EXPECT_EQ(method_call->GetInterface(), dbus::kPropertiesInterface);
-+        EXPECT_EQ(method_call->GetMember(), dbus::kPropertiesGetAll);
-+
-+        // Simulate a successful response, but with inactive state.
-+        auto response = CreateActiveStateGetAllResponse(kStateInactive);
-+        std::move(*callback).Run(response.get());
-+      }));
-+
-+  std::optional<SystemdUnitStatus> status;
-+
-+  SetSystemdScopeUnitNameForXdgPortal(
-+      bus.get(), base::BindLambdaForTesting(
-+                     [&](SystemdUnitStatus result) { status = result; }));
-+
-+  EXPECT_EQ(status, SystemdUnitStatus::kFailedToStart);
-+}
-+
- TEST_F(SetSystemdScopeUnitNameForXdgPortalTest, UnitNameConstruction) {
-   scoped_refptr<dbus::MockBus> bus =
-       base::MakeRefCounted<dbus::MockBus>(dbus::Bus::Options());
-@@ -220,7 +410,14 @@ TEST_F(SetSystemdScopeUnitNameForXdgPortalTest, UnitNameConstruction) {
- 
-   EXPECT_CALL(*bus, GetObjectProxy(kServiceNameSystemd,
-                                    dbus::ObjectPath(kObjectPathSystemd)))
--      .WillOnce(Return(mock_systemd_proxy.get()));
-+      .Times(2)
-+      .WillRepeatedly(Return(mock_systemd_proxy.get()));
-+
-+  auto mock_dbus_unit_proxy = base::MakeRefCounted<dbus::MockObjectProxy>(
-+      bus.get(), kServiceNameSystemd, dbus::ObjectPath(kFakeUnitPath));
-+  EXPECT_CALL(*bus, GetObjectProxy(kServiceNameSystemd,
-+                                   dbus::ObjectPath(kFakeUnitPath)))
-+      .WillOnce(Return(mock_dbus_unit_proxy.get()));
- 
-   EXPECT_CALL(*mock_systemd_proxy, DoCallMethod(_, _, _))
-       .WillOnce(Invoke([&](dbus::MethodCall* method_call, int timeout_ms,
-@@ -256,6 +453,30 @@ TEST_F(SetSystemdScopeUnitNameForXdgPortalTest, UnitNameConstruction) {
- 
-         auto response = dbus::Response::CreateEmpty();
-         std::move(*callback).Run(response.get());
-+      }))
-+      .WillOnce(Invoke([obj_path = kFakeUnitPath](
-+                           dbus::MethodCall* method_call, int timeout_ms,
-+                           dbus::ObjectProxy::ResponseCallback* callback) {
-+        EXPECT_EQ(method_call->GetInterface(), kInterfaceSystemdManager);
-+        EXPECT_EQ(method_call->GetMember(), kMethodGetUnit);
-+
-+        // Simulate a successful response
-+        auto response = dbus::Response::CreateEmpty();
-+        dbus::MessageWriter writer(response.get());
-+        writer.AppendObjectPath(dbus::ObjectPath(obj_path));
-+        std::move(*callback).Run(response.get());
-+      }));
-+
-+  EXPECT_CALL(*mock_dbus_unit_proxy, DoCallMethod(_, _, _))
-+      .WillOnce(Invoke([](dbus::MethodCall* method_call, int timeout_ms,
-+                          dbus::ObjectProxy::ResponseCallback* callback) {
-+        // Then expect kMethodGetUnit. A valid path must be provided.
-+        EXPECT_EQ(method_call->GetInterface(), dbus::kPropertiesInterface);
-+        EXPECT_EQ(method_call->GetMember(), dbus::kPropertiesGetAll);
-+
-+        // Simulate a successful response
-+        auto response = CreateActiveStateGetAllResponse(kStateActive);
-+        std::move(*callback).Run(response.get());
-       }));
- 
-   std::optional<SystemdUnitStatus> status;

+ 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 96c246c74529f01df55416d756245be60630f9ac..9ab2ef6e7c0c66b0405c5af38722c9a0c2dca4b5 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(

+ 1 - 1
patches/chromium/chore_provide_iswebcontentscreationoverridden_with_full_params.patch

@@ -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 393d05a3adc42cc960283b2572e52b80db9010eb..37ee5a89d187f25b2d07d022238e0d60799f93fe 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(

+ 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 a98631cbb6fde0a41dedbbcd642cc721d36ac88d..8e01ae3751e0d3698be4f0c6cb693780f2f24ded 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 @@

+ 4 - 4
patches/chromium/disable_hidden.patch

@@ -6,7 +6,7 @@ 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 734e717d2cc5cf31473ed47f733a619dfacca39e..761469e3ca95ebe1269f005a2b3527cd1f4fdc56 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() {
@@ -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 c3429732757d87df1363a8ce10deee82ef674514..4cf7f44c7fd955cc4d19c11cc0015d3d8562d950 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
+@@ -1010,6 +1010,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 1d08f25b91496dbafc3a164e7fb3e66d1a48557b..92085aca6bd0c95a73b98e4173c0128d596b77f4 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() {

+ 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..976b8ee4a6f9529727209a3e3a44524c62d0c798 100644
+index e51bcccd6f63f01bc736721b1a7057d3380327e4..37191b945003289b90aa3d4c0473bd79ac4e1dd6 100644
 --- a/content/browser/renderer_host/navigation_request.cc
 +++ b/content/browser/renderer_host/navigation_request.cc
-@@ -10947,6 +10947,12 @@ NavigationRequest::GetOriginForURLLoaderFactoryUncheckedWithDebugInfo() {
+@@ -10953,6 +10953,12 @@ NavigationRequest::GetOriginForURLLoaderFactoryUncheckedWithDebugInfo() {
          "blob");
    }
  

+ 4 - 4
patches/chromium/fix_drag_and_drop_icons_on_windows.patch

@@ -122,10 +122,10 @@ index a6957be675eadd39707c0586ce79f7909cfbd675..4d9d985fe0a989555105b487a43669bb
    // When IPH is showing we suppress the tooltip text. This means that we must
    // provide an alternative accessible name, when this is the case. This is
 diff --git a/ui/views/controls/button/label_button.cc b/ui/views/controls/button/label_button.cc
-index 10256f53f4f158150daa2fda406dceea9d171f07..74e63d3d0d35d3b72228f262b3557ed9b7ce5b95 100644
+index 07e805f154bd310a63bc89c95e52a9e7bada63b3..e4cbb2eb880663c11b7ed085639eb7a9aff53924 100644
 --- a/ui/views/controls/button/label_button.cc
 +++ b/ui/views/controls/button/label_button.cc
-@@ -79,13 +79,6 @@ LabelButton::LabelButton(
+@@ -78,13 +78,6 @@ LabelButton::LabelButton(
    SetTextInternal(text);
    SetLayoutManager(std::make_unique<DelegatingLayoutManager>(this));
    GetViewAccessibility().SetIsDefault(is_default_);
@@ -139,7 +139,7 @@ index 10256f53f4f158150daa2fda406dceea9d171f07..74e63d3d0d35d3b72228f262b3557ed9
  }
  
  LabelButton::~LabelButton() {
-@@ -540,10 +533,8 @@ void LabelButton::UpdateImage() {
+@@ -539,10 +532,8 @@ void LabelButton::UpdateImage() {
  
  void LabelButton::AddLayerToRegion(ui::Layer* new_layer,
                                     views::LayerRegion region) {
@@ -150,7 +150,7 @@ index 10256f53f4f158150daa2fda406dceea9d171f07..74e63d3d0d35d3b72228f262b3557ed9
    ink_drop_container()->SetVisible(true);
    ink_drop_container()->AddLayerToRegion(new_layer, region);
  }
-@@ -551,9 +542,7 @@ void LabelButton::AddLayerToRegion(ui::Layer* new_layer,
+@@ -550,9 +541,7 @@ void LabelButton::AddLayerToRegion(ui::Layer* new_layer,
  void LabelButton::RemoveLayerFromRegions(ui::Layer* old_layer) {
    ink_drop_container()->RemoveLayerFromRegions(old_layer);
    ink_drop_container()->SetVisible(false);

+ 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 9503beefcbcfe7d99674582ece10a7e551fae96d..32302e3dae2098319ed2d1f1403649fe8db2887e 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(
+@@ -3229,6 +3229,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 06fc7daf2761ae728f3adf9eb2ef3910a14cf827..8d34f9dfd9a8625a3fab397f7b96c12c87cb8a61 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
+@@ -653,6 +653,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 432a62f63fe11ddb16c40223b9e4d794ec41e186..96c246c74529f01df55416d756245be60630f9ac 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(

+ 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 6b36594994e8f4d7b2235757583a3297bdfa0381..a3cc7afa49d99e4b320ea546523e322e945210ac 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() {
+@@ -2066,9 +2066,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

+ 1 - 1
patches/chromium/fix_return_v8_value_from_localframe_requestexecutescript.patch

@@ -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(

+ 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 9dc296ce1ad3c24e0432f4a2fd7c529cf16f92b6..4d846a6f3e057ea9d855bec22d12c7cfa05789f3 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(
+@@ -4697,6 +4697,9 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
      request->ResetStateForSiteInstanceChange();
    }
  

+ 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 80494b5bb318a9dc4b92b4d2fbb3fab84521d8a9..4d822431714e36e3883ca566802c97eece46c6f8 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],

+ 6 - 6
patches/chromium/mas_avoid_private_macos_api_usage.patch.patch

@@ -591,7 +591,7 @@ index fec51f705d1a8424fdbff13d33aa6a2b16a650e5..42f5feab06cf2ebb20f851a78111aa95
  
    public_deps = [
 diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
-index bea4e26ef8577e8e8bc60287cf1b94c7dfcc9478..eed42b0cbc3422b7fd59ae1b2550c53d6c92c9e3 100644
+index 7e4bc62b4f0ea5ff4792831f012877c91787a345..a8aa56af877fa55dd497de1563ff5eed2de07ebc 100644
 --- a/content/browser/renderer_host/render_widget_host_view_mac.h
 +++ b/content/browser/renderer_host/render_widget_host_view_mac.h
 @@ -23,6 +23,7 @@
@@ -612,7 +612,7 @@ index bea4e26ef8577e8e8bc60287cf1b94c7dfcc9478..eed42b0cbc3422b7fd59ae1b2550c53d
  @class RenderWidgetHostViewCocoa;
  
  namespace content {
-@@ -691,9 +694,11 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
+@@ -692,9 +695,11 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
    // EnsureSurfaceSynchronizedForWebTest().
    uint32_t latest_capture_sequence_number_ = 0u;
  
@@ -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 25eb1d0d4536cf6d336ea99ea9ff5d9d4b6ce9ac..a98631cbb6fde0a41dedbbcd642cc721d36ac88d 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,
+@@ -1620,8 +1623,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,
+@@ -1670,9 +1675,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,
+@@ -2199,20 +2206,26 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
  void RenderWidgetHostViewMac::GetRenderWidgetAccessibilityToken(
      GetRenderWidgetAccessibilityTokenCallback callback) {
    base::ProcessId pid = getpid();

+ 1 - 1
patches/chromium/notification_provenance.patch

@@ -7,7 +7,7 @@ Pass RenderFrameHost through to PlatformNotificationService
 so Electron can identify which renderer a notification came from.
 
 diff --git a/chrome/browser/notifications/platform_notification_service_impl.cc b/chrome/browser/notifications/platform_notification_service_impl.cc
-index ec78c36d4541d9d34f2109b880109ebe3bc817f8..67d92005e53cccbc9a4ae8a0db9c2c6220a09d88 100644
+index 5d7537144171d37a35f567e0a2de19189c3c66df..e3ed396e69f85b70621381266958cc509307180a 100644
 --- a/chrome/browser/notifications/platform_notification_service_impl.cc
 +++ b/chrome/browser/notifications/platform_notification_service_impl.cc
 @@ -239,6 +239,7 @@ bool PlatformNotificationServiceImpl::WasClosedProgrammatically(

+ 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 66f6806030d01f6559b838d98a36959350337e3e..57f3cda1c8125f4a7dfb9a528ea242c450a019df 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(

+ 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 761469e3ca95ebe1269f005a2b3527cd1f4fdc56..6b36594994e8f4d7b2235757583a3297bdfa0381 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) {
+@@ -2000,6 +2000,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 61d09271ab44bbe4f19cfe7c5cf5b21c002d967e..393d05a3adc42cc960283b2572e52b80db9010eb 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

+ 1 - 1
patches/chromium/refactor_expose_file_system_access_blocklist.patch

@@ -8,7 +8,7 @@ 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 12d3c0c19949eb288f34adb5c65747dcc6aa05f4..39cd83a86eced248944624da352ec831f9190948 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 @@

+ 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 9ab2ef6e7c0c66b0405c5af38722c9a0c2dca4b5..acf470ac17cdf9da8f4d551b277b193fd7b3cb62 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 deb5325b14ef849be118f0e82a9d1fedc9f1541a..c5c22e6266436d992f7fc67f930f17052ac5b6df 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;
  

+ 4 - 4
patches/chromium/revert_code_health_clean_up_stale_macwebcontentsocclusion.patch

@@ -233,10 +233,10 @@ index 2991489fae8a4eecad97b1ecb2271f096d9a9229..93b7aa620ad1da250ac06e3383ca6897
  }
  
 diff --git a/content/common/features.cc b/content/common/features.cc
-index be5847985950e9136fc975fdbc021308f48f41b5..a5062c8fb5c5d9f1427819131b71ad6896e9d1df 100644
+index 5323e486d6e1550195317275eb0226bd94ea8e35..d8ed1aba1c69bf3a78ba9cb681999c347cf4eb47 100644
 --- a/content/common/features.cc
 +++ b/content/common/features.cc
-@@ -262,6 +262,14 @@ BASE_FEATURE(kIOSurfaceCapturer,
+@@ -256,6 +256,14 @@ BASE_FEATURE(kIOSurfaceCapturer,
               base::FEATURE_ENABLED_BY_DEFAULT);
  #endif
  
@@ -252,10 +252,10 @@ index be5847985950e9136fc975fdbc021308f48f41b5..a5062c8fb5c5d9f1427819131b71ad68
  // invalidated upon notifications sent by base::SystemMonitor. If disabled, the
  // cache is considered invalid on every enumeration request.
 diff --git a/content/common/features.h b/content/common/features.h
-index 06562dd07ac4f1cad1011d99aed6c09958044486..9748070bc26f8314faec99afdb20a5d91bc9dde2 100644
+index 0f9451fcad172e09adbe0d93d93e78332429acbe..751c8c8ad6d4cf57fab7f9fd62d3f6a8db1ab31f 100644
 --- a/content/common/features.h
 +++ b/content/common/features.h
-@@ -68,6 +68,9 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kInterestGroupUpdateIfOlderThan);
+@@ -67,6 +67,9 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kInterestGroupUpdateIfOlderThan);
  #if BUILDFLAG(IS_MAC)
  CONTENT_EXPORT BASE_DECLARE_FEATURE(kIOSurfaceCapturer);
  #endif

+ 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 37ee5a89d187f25b2d07d022238e0d60799f93fe..36c9d5343f72c64ca315639e9f40c866966121d5 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 be846f0ff4d960d7d26071f4d3c9c34a3d99f233..66f6806030d01f6559b838d98a36959350337e3e 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(
+@@ -8714,6 +8714,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 36c9d5343f72c64ca315639e9f40c866966121d5..432a62f63fe11ddb16c40223b9e4d794ec41e186 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(