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);
|
setCachingEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
metaDataChanged();
|
_q_metaDataChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QNetworkReplyHttpImplPrivate::replyDownloadProgressSlot(qint64 bytesReceived, qint64 bytesTotal)
|
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
|
// 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
|
// the direct code path of qnam.get(...) before the user has a chance
|
||||||
// to connect any signals.
|
// to connect any signals.
|
||||||
QMetaObject::invokeMethod(q, "metaDataChanged", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(q, "_q_metaDataChanged", Qt::QueuedConnection);
|
||||||
QMetaObject::invokeMethod(q, "_q_cacheLoadReadyRead", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(q, "_q_cacheLoadReadyRead", Qt::QueuedConnection);
|
||||||
|
|
||||||
|
|
||||||
@ -1986,7 +1986,7 @@ void QNetworkReplyHttpImplPrivate::error(QNetworkReplyImpl::NetworkError code, c
|
|||||||
emit q->error(code);
|
emit q->error(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QNetworkReplyHttpImplPrivate::metaDataChanged()
|
void QNetworkReplyHttpImplPrivate::_q_metaDataChanged()
|
||||||
{
|
{
|
||||||
// FIXME merge this with replyDownloadMetaData(); ?
|
// FIXME merge this with replyDownloadMetaData(); ?
|
||||||
|
|
||||||
|
@ -124,6 +124,7 @@ public:
|
|||||||
Q_PRIVATE_SLOT(d_func(), void uploadByteDeviceReadyReadSlot())
|
Q_PRIVATE_SLOT(d_func(), void uploadByteDeviceReadyReadSlot())
|
||||||
Q_PRIVATE_SLOT(d_func(), void emitReplyUploadProgress(qint64, qint64))
|
Q_PRIVATE_SLOT(d_func(), void emitReplyUploadProgress(qint64, qint64))
|
||||||
Q_PRIVATE_SLOT(d_func(), void _q_cacheSaveDeviceAboutToClose())
|
Q_PRIVATE_SLOT(d_func(), void _q_cacheSaveDeviceAboutToClose())
|
||||||
|
Q_PRIVATE_SLOT(d_func(), void _q_metaDataChanged())
|
||||||
|
|
||||||
|
|
||||||
#ifndef QT_NO_SSL
|
#ifndef QT_NO_SSL
|
||||||
@ -175,7 +176,7 @@ public:
|
|||||||
void finished();
|
void finished();
|
||||||
void error(QNetworkReply::NetworkError code, const QString &errorString);
|
void error(QNetworkReply::NetworkError code, const QString &errorString);
|
||||||
void _q_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);
|
void checkForRedirect(const int statusCode);
|
||||||
|
|
||||||
|
@ -55,6 +55,7 @@ public slots:
|
|||||||
void init();
|
void init();
|
||||||
void cleanup();
|
void cleanup();
|
||||||
void accessAfterRemoveReadyReadSlot();
|
void accessAfterRemoveReadyReadSlot();
|
||||||
|
void setCookieHeaderMetaDataChangedSlot();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void qnetworkdiskcache_data();
|
void qnetworkdiskcache_data();
|
||||||
@ -68,6 +69,7 @@ private slots:
|
|||||||
void metaData();
|
void metaData();
|
||||||
void remove();
|
void remove();
|
||||||
void accessAfterRemove(); // QTBUG-17400
|
void accessAfterRemove(); // QTBUG-17400
|
||||||
|
void setCookieHeader(); // QTBUG-41514
|
||||||
void setCacheDirectory_data();
|
void setCacheDirectory_data();
|
||||||
void setCacheDirectory();
|
void setCacheDirectory();
|
||||||
void updateMetaData();
|
void updateMetaData();
|
||||||
@ -86,8 +88,9 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QTemporaryDir tempDir;
|
QTemporaryDir tempDir;
|
||||||
QUrl url; // used by accessAfterRemove()
|
QUrl url; // used by accessAfterRemove(), setCookieHeader()
|
||||||
QNetworkDiskCache *diskCache; // used by accessAfterRemove()
|
QNetworkDiskCache *diskCache; // used by accessAfterRemove()
|
||||||
|
QNetworkAccessManager *manager; // used by setCookieHeader()
|
||||||
};
|
};
|
||||||
|
|
||||||
// FIXME same as in tst_qnetworkreply.cpp .. could be unified
|
// 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
|
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()
|
void tst_QNetworkDiskCache::setCacheDirectory_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<QString>("cacheDir");
|
QTest::addColumn<QString>("cacheDir");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user