Handle the mouse back/forward button in the browser directly
Ensure that the result of mouse up is passed back to the browser so
that it can be executed on the browser side.
BUG=850847,705583
Change-Id: Iebf871c43a9957af1f66a398344efcddc47d7293
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1769525
Commit-Queue: Dave Tapuska <[email protected]>
Reviewed-by: Charlie Reis <[email protected]>
Reviewed-by: Navid Zolghadr <[email protected]>
Cr-Commit-Position: refs/heads/master@{#694770}
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index ddd8255..6ab3420 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -2372,6 +2372,25 @@
: KeyboardEventProcessingResult::NOT_HANDLED;
}
+bool WebContentsImpl::HandleMouseEvent(const blink::WebMouseEvent& event) {
+ // Handle mouse button back/forward in the browser process after the render
+ // process is done with the event. This ensures all renderer-initiated history
+ // navigations can be treated consistently.
+ if (event.GetType() == blink::WebInputEvent::Type::kMouseUp) {
+ WebContentsImpl* outermost = GetOutermostWebContents();
+ if (event.button == blink::WebPointerProperties::Button::kBack &&
+ outermost->controller_.CanGoBack()) {
+ outermost->controller_.GoBack();
+ return true;
+ } else if (event.button == blink::WebPointerProperties::Button::kForward &&
+ outermost->controller_.CanGoForward()) {
+ outermost->controller_.GoForward();
+ return true;
+ }
+ }
+ return false;
+}
+
bool WebContentsImpl::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {
if (browser_plugin_embedder_ &&
browser_plugin_embedder_->HandleKeyboardEvent(event)) {