From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samuel Attard <sattard@slack-corp.com>
Date: Fri, 14 Feb 2020 13:35:47 -0800
Subject: fix: route mouse event navigations through the web_contents delegate

This ensures that embedders can handle browser-side mouse navigations
themselves.  We need this so that we can correctly ensure that processes
are not restarted for in-document navigations.

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/1769525

This patch can be removed once app.allowRendererProcessReuse is forced
to true as then Chromiums assumptions around processes become correct.

diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 762d4d6164df6f097c3dd77c695a3270a225ec68..eac2487f18332616b1550bd7fa1f39f5c532b079 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -2971,11 +2971,13 @@ bool WebContentsImpl::HandleMouseEvent(const blink::WebMouseEvent& event) {
     WebContentsImpl* outermost = GetOutermostWebContents();
     if (event.button == blink::WebPointerProperties::Button::kBack &&
         outermost->controller_.CanGoBack()) {
-      outermost->controller_.GoBack();
+      if (delegate_->OnGoToEntryOffset(-1))
+        outermost->controller_.GoBack();
       return true;
     } else if (event.button == blink::WebPointerProperties::Button::kForward &&
                outermost->controller_.CanGoForward()) {
-      outermost->controller_.GoForward();
+      if (delegate_->OnGoToEntryOffset(1))
+        outermost->controller_.GoForward();
       return true;
     }
   }
