qquicknetworkreply.cpp [plain text]
#include "config.h"
#include "qquicknetworkreply_p.h"
#include "QtNetworkReplyData.h"
#include "QtNetworkRequestData.h"
#include "qquickwebview_p.h"
#include <QDateTime>
using namespace WebKit;
QQuickNetworkReply::QQuickNetworkReply(QObject* parent)
: QObject(parent)
, m_networkReplyData(adoptRef(new WebKit::QtRefCountedNetworkReplyData))
{
Q_ASSERT(parent);
}
QString QQuickNetworkReply::contentType() const
{
return m_networkReplyData->data().m_contentType;
}
void QQuickNetworkReply::setContentType(const QString& contentType)
{
m_networkReplyData->data().m_contentType = contentType;
}
QVariant QQuickNetworkReply::data() const
{
return m_data;
}
void QQuickNetworkReply::setData(const QVariant& data)
{
m_data = data;
}
void QQuickNetworkReply::send()
{
if (m_data.isNull())
return;
uint64_t smLength = 0;
const void* ptrData = 0;
QString stringData;
QByteArray byteArrayData;
if (m_data.type() == QVariant::String) {
stringData = m_data.toString();
ptrData = reinterpret_cast<const void*>(stringData.constData());
smLength = sizeof(QChar) * stringData.length();
setContentType(QLatin1String("text/html; charset=utf-16"));
} else {
if (!m_data.canConvert<QByteArray>())
return;
byteArrayData = m_data.toByteArray();
ptrData = byteArrayData.data();
smLength = byteArrayData.size();
}
if (contentType().isEmpty()) {
qWarning("QQuickNetworkReply::send - Cannot send raw data without a content type being specified!");
return;
}
WTF::RefPtr<WebKit::SharedMemory> sharedMemory = SharedMemory::create(smLength);
if (!sharedMemory)
return;
memcpy(sharedMemory->data(), ptrData, smLength);
if (sharedMemory->createHandle(m_networkReplyData->data().m_dataHandle, SharedMemory::ReadOnly)) {
m_networkReplyData->data().m_contentLength = smLength;
if (m_webViewExperimental)
m_webViewExperimental.data()->sendApplicationSchemeReply(this);
}
m_networkReplyData = adoptRef(new WebKit::QtRefCountedNetworkReplyData);
}
void QQuickNetworkReply::setWebViewExperimental(QQuickWebViewExperimental* webViewExperimental)
{
m_webViewExperimental = webViewExperimental;
}
WebKit::QtRefCountedNetworkRequestData* QQuickNetworkReply::networkRequestData() const
{
return m_networkRequestData.get();
}
void QQuickNetworkReply::setNetworkRequestData(WTF::PassRefPtr<WebKit::QtRefCountedNetworkRequestData> data)
{
m_networkRequestData = data;
m_networkReplyData->data().m_replyUuid = m_networkRequestData->data().m_replyUuid;
}
WebKit::QtRefCountedNetworkReplyData* QQuickNetworkReply::networkReplyData() const
{
return m_networkReplyData.get();
}
#include "moc_qquicknetworkreply_p.cpp"