summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/api/qwebengineurlrequestinfo.cpp10
-rw-r--r--src/core/api/qwebengineurlrequestinfo.h1
-rw-r--r--src/core/api/qwebengineurlrequestinfo_p.h1
-rw-r--r--src/core/api/qwebengineurlrequestinterceptor.h2
-rw-r--r--src/core/network_delegate_qt.cpp3
-rw-r--r--tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp8
6 files changed, 18 insertions, 7 deletions
diff --git a/src/core/api/qwebengineurlrequestinfo.cpp b/src/core/api/qwebengineurlrequestinfo.cpp
index e8ce65be3..0aab4aa1b 100644
--- a/src/core/api/qwebengineurlrequestinfo.cpp
+++ b/src/core/api/qwebengineurlrequestinfo.cpp
@@ -126,6 +126,7 @@ QWebEngineUrlRequestInfoPrivate::QWebEngineUrlRequestInfoPrivate(QWebEngineUrlRe
, url(u)
, firstPartyUrl(fpu)
, method(m)
+ , changed(false)
{
}
@@ -241,6 +242,12 @@ QByteArray QWebEngineUrlRequestInfo::requestMethod() const
return d->method;
}
+bool QWebEngineUrlRequestInfo::changed() const
+{
+ Q_D(const QWebEngineUrlRequestInfo);
+ return d->changed;
+}
+
/*!
Redirects this request to \a url.
It is only possible to redirect requests that do not have payload data, such as GET requests.
@@ -249,6 +256,7 @@ QByteArray QWebEngineUrlRequestInfo::requestMethod() const
void QWebEngineUrlRequestInfo::redirect(const QUrl &url)
{
Q_D(QWebEngineUrlRequestInfo);
+ d->changed = true;
d->url = url;
}
@@ -261,6 +269,7 @@ void QWebEngineUrlRequestInfo::redirect(const QUrl &url)
void QWebEngineUrlRequestInfo::block(bool shouldBlock)
{
Q_D(QWebEngineUrlRequestInfo);
+ d->changed = true;
d->shouldBlockRequest = shouldBlock;
}
@@ -271,6 +280,7 @@ void QWebEngineUrlRequestInfo::block(bool shouldBlock)
void QWebEngineUrlRequestInfo::setExtraHeader(const QByteArray &name, const QByteArray &value)
{
Q_D(QWebEngineUrlRequestInfo);
+ d->changed = true;
d->extraHeaders.insert(name, value);
}
diff --git a/src/core/api/qwebengineurlrequestinfo.h b/src/core/api/qwebengineurlrequestinfo.h
index e6e225051..1443665af 100644
--- a/src/core/api/qwebengineurlrequestinfo.h
+++ b/src/core/api/qwebengineurlrequestinfo.h
@@ -88,6 +88,7 @@ public:
QUrl requestUrl() const;
QUrl firstPartyUrl() const;
QByteArray requestMethod() const;
+ bool changed() const;
void block(bool shouldBlock);
void redirect(const QUrl &url);
diff --git a/src/core/api/qwebengineurlrequestinfo_p.h b/src/core/api/qwebengineurlrequestinfo_p.h
index 1b1279d27..df5f18d6e 100644
--- a/src/core/api/qwebengineurlrequestinfo_p.h
+++ b/src/core/api/qwebengineurlrequestinfo_p.h
@@ -68,6 +68,7 @@ public:
QUrl url;
QUrl firstPartyUrl;
const QByteArray method;
+ bool changed;
QHash<QByteArray, QByteArray> extraHeaders;
QWebEngineUrlRequestInfo *q_ptr;
diff --git a/src/core/api/qwebengineurlrequestinterceptor.h b/src/core/api/qwebengineurlrequestinterceptor.h
index 9a632c3e0..372ee9066 100644
--- a/src/core/api/qwebengineurlrequestinterceptor.h
+++ b/src/core/api/qwebengineurlrequestinterceptor.h
@@ -57,7 +57,7 @@ public:
{
}
- virtual bool interceptRequest(QWebEngineUrlRequestInfo &info) = 0;
+ virtual void interceptRequest(QWebEngineUrlRequestInfo &info) = 0;
};
QT_END_NAMESPACE
diff --git a/src/core/network_delegate_qt.cpp b/src/core/network_delegate_qt.cpp
index 3f67e7c0d..6fdabcd4c 100644
--- a/src/core/network_delegate_qt.cpp
+++ b/src/core/network_delegate_qt.cpp
@@ -109,7 +109,8 @@ int NetworkDelegateQt::OnBeforeURLRequest(net::URLRequest *request, const net::C
, toQt(request->first_party_for_cookies())
, QByteArray::fromStdString(request->method()));
QWebEngineUrlRequestInfo requestInfo(infoPrivate);
- if (interceptor->interceptRequest(requestInfo)) {
+ interceptor->interceptRequest(requestInfo);
+ if (requestInfo.changed()) {
int result = infoPrivate->shouldBlockRequest ? net::ERR_ABORTED : net::OK;
if (qUrl != infoPrivate->url)
diff --git a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
index 4a261c46b..c4461f1c1 100644
--- a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
+++ b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
@@ -100,15 +100,14 @@ public:
QList<QUrl> firstPartyUrls;
bool shouldIntercept;
- bool interceptRequest(QWebEngineUrlRequestInfo &info) override
+ void interceptRequest(QWebEngineUrlRequestInfo &info) override
{
info.block(info.requestMethod() != QByteArrayLiteral("GET"));
- if (info.requestUrl().toString().endsWith(QLatin1String("__placeholder__")))
+ if (shouldIntercept && info.requestUrl().toString().endsWith(QLatin1String("__placeholder__")))
info.redirect(QUrl("qrc:///resources/content.html"));
observedUrls.append(info.requestUrl());
firstPartyUrls.append(info.firstPartyUrl());
- return shouldIntercept;
}
TestRequestInterceptor(bool intercept)
: shouldIntercept(intercept)
@@ -162,11 +161,10 @@ class LocalhostContentProvider : public QWebEngineUrlRequestInterceptor
public:
LocalhostContentProvider() { }
- bool interceptRequest(QWebEngineUrlRequestInfo &info) override
+ void interceptRequest(QWebEngineUrlRequestInfo &info) override
{
requestedUrls.append(info.requestUrl());
info.redirect(QUrl("data:text/html,<p>hello"));
- return true;
}
QList<QUrl> requestedUrls;