QNetworkDiskCache: Fix QNetworkDiskCache don't handle to set CookieHeader.
QNetworkDiskCache don't handle to set CookieHeader. so All Set-Cookie's value is invalid. The root of cause is that metaDataChanged() don't work because of no slot for it. Add the slot for it and renamed to _q_metaDataChanged. Task-number: QTBUG-41514 Change-Id: I5cec017e59a1de69c6e89c0bc7209a73dcdc11da Reviewed-by: Jeongmin Kim <jm86.kim@lge.com> Reviewed-by: Jung Dong-Heon <clamp03@gmail.com> Reviewed-by: Peter Hartmann <phartmann@blackberry.com>
This commit is contained in:
parent
b5bbfad0a4
commit
1ff6c575ce
@ -1166,7 +1166,7 @@ void QNetworkReplyHttpImplPrivate::replyDownloadMetaData
|
||||
setCachingEnabled(true);
|
||||
}
|
||||
|
||||
metaDataChanged();
|
||||
_q_metaDataChanged();
|
||||
}
|
||||
|
||||
void QNetworkReplyHttpImplPrivate::replyDownloadProgressSlot(qint64 bytesReceived, qint64 bytesTotal)
|
||||
@ -1359,7 +1359,7 @@ bool QNetworkReplyHttpImplPrivate::sendCacheContents(const QNetworkCacheMetaData
|
||||
// This needs to be emitted in the event loop because it can be reached at
|
||||
// the direct code path of qnam.get(...) before the user has a chance
|
||||
// to connect any signals.
|
||||
QMetaObject::invokeMethod(q, "metaDataChanged", Qt::QueuedConnection);
|
||||
QMetaObject::invokeMethod(q, "_q_metaDataChanged", Qt::QueuedConnection);
|
||||
QMetaObject::invokeMethod(q, "_q_cacheLoadReadyRead", Qt::QueuedConnection);
|
||||
|
||||
|
||||
@ -1986,7 +1986,7 @@ void QNetworkReplyHttpImplPrivate::error(QNetworkReplyImpl::NetworkError code, c
|
||||
emit q->error(code);
|
||||
}
|
||||
|
||||
void QNetworkReplyHttpImplPrivate::metaDataChanged()
|
||||
void QNetworkReplyHttpImplPrivate::_q_metaDataChanged()
|
||||
{
|
||||
// FIXME merge this with replyDownloadMetaData(); ?
|
||||
|
||||
|
@ -124,6 +124,7 @@ public:
|
||||
Q_PRIVATE_SLOT(d_func(), void uploadByteDeviceReadyReadSlot())
|
||||
Q_PRIVATE_SLOT(d_func(), void emitReplyUploadProgress(qint64, qint64))
|
||||
Q_PRIVATE_SLOT(d_func(), void _q_cacheSaveDeviceAboutToClose())
|
||||
Q_PRIVATE_SLOT(d_func(), void _q_metaDataChanged())
|
||||
|
||||
|
||||
#ifndef QT_NO_SSL
|
||||
@ -175,7 +176,7 @@ public:
|
||||
void finished();
|
||||
void error(QNetworkReply::NetworkError code, const QString &errorString);
|
||||
void _q_error(QNetworkReply::NetworkError code, const QString &errorString);
|
||||
void metaDataChanged();
|
||||
void _q_metaDataChanged();
|
||||
|
||||
void checkForRedirect(const int statusCode);
|
||||
|
||||
|
@ -55,6 +55,7 @@ public slots:
|
||||
void init();
|
||||
void cleanup();
|
||||
void accessAfterRemoveReadyReadSlot();
|
||||
void setCookieHeaderMetaDataChangedSlot();
|
||||
|
||||
private slots:
|
||||
void qnetworkdiskcache_data();
|
||||
@ -68,6 +69,7 @@ private slots:
|
||||
void metaData();
|
||||
void remove();
|
||||
void accessAfterRemove(); // QTBUG-17400
|
||||
void setCookieHeader(); // QTBUG-41514
|
||||
void setCacheDirectory_data();
|
||||
void setCacheDirectory();
|
||||
void updateMetaData();
|
||||
@ -86,8 +88,9 @@ private slots:
|
||||
|
||||
private:
|
||||
QTemporaryDir tempDir;
|
||||
QUrl url; // used by accessAfterRemove()
|
||||
QUrl url; // used by accessAfterRemove(), setCookieHeader()
|
||||
QNetworkDiskCache *diskCache; // used by accessAfterRemove()
|
||||
QNetworkAccessManager *manager; // used by setCookieHeader()
|
||||
};
|
||||
|
||||
// FIXME same as in tst_qnetworkreply.cpp .. could be unified
|
||||
@ -403,6 +406,40 @@ void tst_QNetworkDiskCache::accessAfterRemoveReadyReadSlot()
|
||||
diskCache->remove(url); // this used to cause a crash later on
|
||||
}
|
||||
|
||||
void tst_QNetworkDiskCache::setCookieHeader() // QTBUG-41514
|
||||
{
|
||||
SubQNetworkDiskCache *cache = new SubQNetworkDiskCache();
|
||||
url = QUrl("http://www.foo.com/cookieTest.html");
|
||||
QNetworkCacheMetaData metaData;
|
||||
metaData.setUrl(url);
|
||||
|
||||
QNetworkCacheMetaData::RawHeaderList headers;
|
||||
headers.append(QNetworkCacheMetaData::RawHeader("Set-Cookie", "aaa=bbb"));
|
||||
metaData.setRawHeaders(headers);
|
||||
metaData.setSaveToDisk(true);
|
||||
cache->setupWithOne(tempDir.path(), url, metaData);
|
||||
|
||||
manager = new QNetworkAccessManager();
|
||||
manager->setCache(cache);
|
||||
|
||||
QNetworkRequest request(url);
|
||||
QNetworkReply *reply = manager->get(request);
|
||||
connect(reply, SIGNAL(metaDataChanged()), this, SLOT(setCookieHeaderMetaDataChangedSlot()));
|
||||
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
|
||||
|
||||
QTestEventLoop::instance().enterLoop(5);
|
||||
QVERIFY(!QTestEventLoop::instance().timeout());
|
||||
|
||||
reply->deleteLater();
|
||||
manager->deleteLater();
|
||||
}
|
||||
|
||||
void tst_QNetworkDiskCache::setCookieHeaderMetaDataChangedSlot()
|
||||
{
|
||||
QList<QNetworkCookie> actualCookieJar = manager->cookieJar()->cookiesForUrl(url);
|
||||
QVERIFY(!actualCookieJar.empty());
|
||||
}
|
||||
|
||||
void tst_QNetworkDiskCache::setCacheDirectory_data()
|
||||
{
|
||||
QTest::addColumn<QString>("cacheDir");
|
||||
|
Loading…
x
Reference in New Issue
Block a user