From 630f7b24f67646b05a2222761b192316123d8931 Mon Sep 17 00:00:00 2001
From: Viktor Engelmann <viktor.engelmann@qt.io>
Date: Mon, 26 Jun 2017 16:26:01 +0200
Subject: [PATCH] Call stopFinding, when navigating away

When one searches for text on one page and then navigates away,
results for the search-term are also highlighted on the new page.
To stop this from happening, we now call adapter->stopFinding()
when we navigate away from a page.

Task-number: QTBUG-61506
Change-Id: I09e064d7788b12eae0a67c01e4f5872d94924617
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
---
 src/webengine/api/qquickwebengineview.cpp       | 2 ++
 src/webenginewidgets/api/qwebenginepage.cpp     | 2 ++
 tests/auto/quick/qmltests/data/tst_findText.qml | 6 +++---
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index aae0efea8..ae75b7f34 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -356,6 +356,8 @@ void QQuickWebEngineViewPrivate::navigationRequested(int navigationType, const Q
     Q_EMIT q->navigationRequested(&navigationRequest);
 
     navigationRequestAction = navigationRequest.action();
+    if ((navigationRequestAction == WebContentsAdapterClient::AcceptRequest) && adapter)
+        adapter->stopFinding();
 }
 
 void QQuickWebEngineViewPrivate::javascriptDialog(QSharedPointer<JavaScriptDialogController> dialog)
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 6042b9fdc..51456128f 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -1431,6 +1431,8 @@ void QWebEnginePagePrivate::navigationRequested(int navigationType, const QUrl &
 {
     Q_Q(QWebEnginePage);
     bool accepted = q->acceptNavigationRequest(url, static_cast<QWebEnginePage::NavigationType>(navigationType), isMainFrame);
+    if (accepted && adapter)
+        adapter->stopFinding();
     navigationRequestAction = accepted ? WebContentsAdapterClient::AcceptRequest : WebContentsAdapterClient::IgnoreRequest;
 }
 
diff --git a/tests/auto/quick/qmltests/data/tst_findText.qml b/tests/auto/quick/qmltests/data/tst_findText.qml
index 8526012c9..f8730ca7b 100644
--- a/tests/auto/quick/qmltests/data/tst_findText.qml
+++ b/tests/auto/quick/qmltests/data/tst_findText.qml
@@ -211,9 +211,9 @@ TestWebEngineView {
             if (!webEngineView.waitForLoadSucceeded(12000))
                 skip("Couldn't load page from network, skipping test.");
 
-            // Can't be sure whether the findText succeeded before the new load.
-            // Thus don't check the find result just whether the callback was called.
-            tryVerify(function() { return webEngineView.matchCount != -1; });
+            // The callback is not supposed to be called, see QTBUG-61506.
+            // Check whether the callback was called (-1 = no, other values = yes).
+            tryVerify(function() { return webEngineView.matchCount == -1; });
         }
     }
 }
-- 
GitLab