summaryrefslogtreecommitdiffstats
path: root/src/core/web_contents_adapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/web_contents_adapter.cpp')
-rw-r--r--src/core/web_contents_adapter.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 82d6ed26f..be68e6ef4 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -59,6 +59,7 @@
#include "content/public/common/renderer_preferences.h"
#include "content/public/common/url_constants.h"
#include "ui/shell_dialogs/selected_file_info.h"
+#include "third_party/WebKit/public/web/WebFindOptions.h"
#include <QDir>
#include <QGuiApplication>
@@ -173,6 +174,7 @@ public:
scoped_ptr<QtRenderViewObserverHost> renderViewObserverHost;
WebContentsAdapterClient *adapterClient;
quint64 lastRequestId;
+ QString lastSearchedString;
};
WebContentsAdapterPrivate::WebContentsAdapterPrivate(WebContentsAdapterClient::RenderingMode renderingMode)
@@ -429,6 +431,29 @@ quint64 WebContentsAdapter::fetchDocumentInnerText()
return d->lastRequestId;
}
+quint64 WebContentsAdapter::findText(const QString &subString, bool caseSensitively, bool findBackward)
+{
+ Q_D(WebContentsAdapter);
+ WebKit::WebFindOptions options;
+ options.forward = !findBackward;
+ options.matchCase = caseSensitively;
+ options.findNext = subString == d->lastSearchedString;
+ d->lastSearchedString = subString;
+
+ // Find already allows a request ID as input, but only as an int.
+ // Use the same counter but mod it to MAX_INT, this keeps the same likeliness of request ID clashing.
+ int shrunkRequestId = ++d->lastRequestId & 0x7fffffff;
+ d->webContents->GetRenderViewHost()->Find(shrunkRequestId, toString16(subString), options);
+ return shrunkRequestId;
+}
+
+void WebContentsAdapter::stopFinding()
+{
+ Q_D(WebContentsAdapter);
+ d->lastSearchedString = QString();
+ d->webContents->GetRenderViewHost()->StopFinding(content::STOP_FIND_ACTION_CLEAR_SELECTION);
+}
+
void WebContentsAdapter::wasShown()
{
Q_D(WebContentsAdapter);