From 8bbfa1fe12b88a8cd1e27652ed54d1afc4d872e2 Mon Sep 17 00:00:00 2001
From: Peter Varga <pvarga@inf.u-szeged.hu>
Date: Wed, 24 Sep 2014 11:42:26 +0200
Subject: [PATCH] Fix WebContentsAdapater::requestedUrl() function

The requestedUrl function didn't return empty URL even if
the empty URL was really requested. It was assumed if
GetOriginalRequestURL returned empty string that means the requested url was
not set in the navigation entry.

This fix handles that case when empty url is set in the navigation
entry as requested url. If the navigation entry is in pending state that means the
request url has not been set yet thus the actual URL should be returned.

Change-Id: Ic2eff5c487686f7c0e349a7a34a86b80551a002f
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
---
 src/core/web_contents_adapter.cpp                        | 9 +++++++--
 .../auto/widgets/qwebengineframe/tst_qwebengineframe.cpp | 5 +----
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 739b3b423..3533c0743 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -454,10 +454,15 @@ QUrl WebContentsAdapter::activeUrl() const
 QUrl WebContentsAdapter::requestedUrl() const
 {
     Q_D(const WebContentsAdapter);
-    if (content::NavigationEntry* entry = d->webContents->GetController().GetVisibleEntry()) {
+    content::NavigationEntry* entry = d->webContents->GetController().GetVisibleEntry();
+    content::NavigationEntry* pendingEntry = d->webContents->GetController().GetPendingEntry();
+
+    if (entry) {
         if (!entry->GetOriginalRequestURL().is_empty())
             return toQt(entry->GetOriginalRequestURL());
-        return toQt(entry->GetURL());
+
+        if (pendingEntry && pendingEntry == entry)
+            return toQt(entry->GetURL());
     }
     return QUrl();
 }
diff --git a/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp b/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp
index 7ad18cd0f..4b18f8e7a 100644
--- a/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp
+++ b/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp
@@ -365,6 +365,7 @@ void tst_QWebEngineFrame::requestedUrlAfterSetAndLoadFailures()
     ::waitForSignal(&page, SIGNAL(loadFinished(bool)));
     QCOMPARE(spy.count(), 2);
     QCOMPARE(page.url(), first);
+    QEXPECT_FAIL("", "Slight change: The requestedUrl() function catches the error page's entry here thus it results the error page's requested url.", Continue);
     QCOMPARE(page.requestedUrl(), second);
     QVERIFY(!spy.at(1).first().toBool());
 }
@@ -1293,7 +1294,6 @@ void tst_QWebEngineFrame::setUrlToEmpty()
 
     QTRY_COMPARE(spy.count(), expectedLoadFinishedCount);
     QCOMPARE(page.url(), aboutBlank);
-    QEXPECT_FAIL("", "Slight change: This information now comes from Chromium and the behavior of requestedUrl changed in this case.", Continue);
     QCOMPARE(page.requestedUrl(), QUrl());
     QCOMPARE(baseUrlSync(&page), aboutBlank);
 
@@ -1312,7 +1312,6 @@ void tst_QWebEngineFrame::setUrlToEmpty()
 
     QTRY_COMPARE(spy.count(), expectedLoadFinishedCount);
     QCOMPARE(page.url(), aboutBlank);
-    QEXPECT_FAIL("", "Slight change: This information now comes from Chromium and the behavior of requestedUrl changed in this case.", Continue);
     QCOMPARE(page.requestedUrl(), QUrl());
     QCOMPARE(baseUrlSync(&page), aboutBlank);
 }
@@ -1368,7 +1367,6 @@ void tst_QWebEngineFrame::setUrlHistory()
     m_page->setUrl(QUrl());
     expectedLoadFinishedCount++;
     QTRY_COMPARE(spy.count(), expectedLoadFinishedCount);
-    QEXPECT_FAIL("", "Slight change: QUrl() isn't replaced by about:blank.", Continue);
     QCOMPARE(m_page->url(), aboutBlank);
     QCOMPARE(m_page->requestedUrl(), QUrl());
     QCOMPARE(collectHistoryUrls(m_page->history()), QStringList());
@@ -1393,7 +1391,6 @@ void tst_QWebEngineFrame::setUrlHistory()
     expectedLoadFinishedCount++;
     QTRY_COMPARE(spy.count(), expectedLoadFinishedCount);
     QCOMPARE(m_page->url(), aboutBlank);
-    QEXPECT_FAIL("", "Slight change: This information now comes from Chromium and the behavior of requestedUrl changed in this case.", Continue);
     QCOMPARE(m_page->requestedUrl(), QUrl());
     QEXPECT_FAIL("", "Slight change: load(QUrl()) currently loads about:blank and nothing prevents it from being added to the history.", Continue);
     QCOMPARE(collectHistoryUrls(m_page->history()), QStringList() << QStringLiteral("qrc:/test1.html"));
-- 
GitLab