summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2022-04-06 12:27:17 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2022-05-05 10:04:10 +0200
commita90f994c5d1e3edeafa8dc8048fe7c6a74aead1a (patch)
tree574ba8a1dbd01701f52a457cab175608a6110823
parent06fc47309609b9be735817da4f3bdf2e30e0b99c (diff)
Fix navigation to non-local URLs
They are passed in another part of the DropItem object. Task-number: QTBUG-102192 Change-Id: If52a88ce2688c25ea0edcc0d1e8f962f2cdd29dd Reviewed-by: Kirill Burtsev <kirill.burtsev@qt.io> (cherry picked from commit 742e6786aeb500ef9bc850bf84803d5f388e3927)
-rw-r--r--src/core/web_contents_adapter.cpp9
-rw-r--r--tests/auto/widgets/qwebengineview/BLACKLIST3
-rw-r--r--tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp37
3 files changed, 48 insertions, 1 deletions
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 5b81bd3fc..cca31e144 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -1496,8 +1496,10 @@ static QMimeData *mimeDataFromDropData(const content::DropData &dropData)
mimeData->setText(toQt(*dropData.text));
if (dropData.html.has_value())
mimeData->setHtml(toQt(*dropData.html));
- if (dropData.url.is_valid())
+ if (dropData.url.is_valid()) {
mimeData->setUrls(QList<QUrl>() << toQt(dropData.url));
+ mimeData->setText(toQt(dropData.url_title));
+ }
if (!dropData.custom_data.empty()) {
base::Pickle pickle;
ui::WriteCustomDataToPickle(dropData.custom_data, &pickle);
@@ -1621,6 +1623,11 @@ static void fillDropDataFromMimeData(content::DropData *dropData, const QMimeDat
}
if (!dropData->filenames.empty())
return;
+ if (mimeData->hasUrls()) {
+ dropData->url = toGurl(urls.first());
+ if (mimeData->hasText())
+ dropData->url_title = toString16(mimeData->text());
+ }
if (mimeData->hasHtml())
dropData->html = toOptionalString16(mimeData->html());
if (mimeData->hasText())
diff --git a/tests/auto/widgets/qwebengineview/BLACKLIST b/tests/auto/widgets/qwebengineview/BLACKLIST
index c1a46e16d..592b47c01 100644
--- a/tests/auto/widgets/qwebengineview/BLACKLIST
+++ b/tests/auto/widgets/qwebengineview/BLACKLIST
@@ -9,3 +9,6 @@ osx
[mixLangLocale:eu_ES]
*
+
+[navigateOnDrop:file]
+windows
diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
index 4854b3603..b56053fd2 100644
--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
+++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
@@ -38,6 +38,7 @@
#include <QLineEdit>
#include <QHBoxLayout>
#include <QMenu>
+#include <QMimeData>
#include <QQuickItem>
#include <QQuickWidget>
#include <QtWebEngineCore/qwebenginehttprequest.h>
@@ -173,6 +174,8 @@ private Q_SLOTS:
void setViewPreservesExplicitPage();
void closeDiscardsPage();
void loadAfterRendererCrashed();
+ void navigateOnDrop_data();
+ void navigateOnDrop();
};
// This will be called before the first test function is executed.
@@ -3479,5 +3482,39 @@ void tst_QWebEngineView::loadAfterRendererCrashed()
QVERIFY(loadSpy.first().first().toBool());
}
+void tst_QWebEngineView::navigateOnDrop_data()
+{
+ QTest::addColumn<QUrl>("url");
+ QTest::newRow("file") << QUrl::fromLocalFile(QDir(TESTS_SOURCE_DIR).absoluteFilePath("qwebengineview/resources/dummy.html"));
+ QTest::newRow("qrc") << QUrl("qrc:///resources/dummy.html");
+}
+
+void tst_QWebEngineView::navigateOnDrop()
+{
+ QFETCH(QUrl, url);
+ struct WebEngineView : QWebEngineView {
+ QWebEngineView* createWindow(QWebEnginePage::WebWindowType /* type */) override { return this; }
+ } view;
+ view.resize(640, 480);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QSignalSpy loadSpy(&view, &QWebEngineView::loadFinished);
+ QMimeData mimeData;
+ mimeData.setUrls({ url });
+
+ auto sendEvents = [&] () {
+ QDragEnterEvent dee(view.rect().center(), Qt::CopyAction, &mimeData, Qt::LeftButton, Qt::NoModifier);
+ QApplication::sendEvent(&view, &dee);
+ QDropEvent de(view.rect().center(), Qt::CopyAction, &mimeData, Qt::LeftButton, Qt::NoModifier);
+ QApplication::sendEvent(&view, &de);
+ };
+
+ sendEvents();
+ QTRY_COMPARE(loadSpy.count(), 1);
+ QVERIFY(loadSpy.first().first().toBool());
+ QCOMPARE(view.url(), url);
+}
+
QTEST_MAIN(tst_QWebEngineView)
#include "tst_qwebengineview.moc"