From 2c0a66dd1c308923639ad964f067c6e49b626e26 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 6 Apr 2022 12:27:17 +0200 Subject: 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 (cherry picked from commit 742e6786aeb500ef9bc850bf84803d5f388e3927) --- src/core/web_contents_adapter.cpp | 9 ++++++++- tests/auto/widgets/qwebengineview/BLACKLIST | 2 +- tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp | 10 +++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index d298c0837..41ec997a3 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -1487,8 +1487,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() << toQt(dropData.url)); + mimeData->setText(toQt(dropData.url_title)); + } if (!dropData.custom_data.empty()) { base::Pickle pickle; ui::WriteCustomDataToPickle(dropData.custom_data, &pickle); @@ -1612,6 +1614,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 99161a591..4bc678d10 100644 --- a/tests/auto/widgets/qwebengineview/BLACKLIST +++ b/tests/auto/widgets/qwebengineview/BLACKLIST @@ -13,5 +13,5 @@ osx [reusePage] b2qt arm -[navigateOnDrop] +[navigateOnDrop:file] windows diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp index 36861065f..39e95875f 100644 --- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp +++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp @@ -176,6 +176,7 @@ private Q_SLOTS: void closeDiscardsPage(); void loadAfterRendererCrashed(); void inspectElement(); + void navigateOnDrop_data(); void navigateOnDrop(); }; @@ -3516,8 +3517,16 @@ void tst_QWebEngineView::inspectElement() QTest::qWait(100); } +void tst_QWebEngineView::navigateOnDrop_data() +{ + QTest::addColumn("url"); + QTest::newRow("file") << QUrl::fromLocalFile(QDir(QT_TESTCASE_SOURCEDIR).absoluteFilePath("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; @@ -3526,7 +3535,6 @@ void tst_QWebEngineView::navigateOnDrop() QVERIFY(QTest::qWaitForWindowExposed(&view)); QSignalSpy loadSpy(&view, &QWebEngineView::loadFinished); - auto url = QUrl::fromLocalFile(QDir(QT_TESTCASE_SOURCEDIR).absoluteFilePath("resources/dummy.html")); QMimeData mimeData; mimeData.setUrls({ url }); -- cgit v1.2.3