summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp')
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp156
1 files changed, 50 insertions, 106 deletions
diff --git a/Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp b/Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp
index 4e8810302..38ac7b909 100644
--- a/Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qquicknetworkreply.cpp
@@ -30,151 +30,95 @@ using namespace WebKit;
QQuickNetworkReply::QQuickNetworkReply(QObject* parent)
: QObject(parent)
- , m_networkReplyData(adoptRef(new WebKit::QtNetworkReplyData))
+ , m_networkReplyData(adoptRef(new WebKit::QtRefCountedNetworkReplyData))
{
Q_ASSERT(parent);
}
QString QQuickNetworkReply::contentType() const
{
- return m_networkReplyData->m_contentType;
+ return m_networkReplyData->data().m_contentType;
}
void QQuickNetworkReply::setContentType(const QString& contentType)
{
- m_networkReplyData->m_contentType = contentType;
+ m_networkReplyData->data().m_contentType = contentType;
}
-QNetworkAccessManager::Operation QQuickNetworkReply::operation() const
+QVariant QQuickNetworkReply::data() const
{
- return m_networkReplyData->m_operation;
+ return m_data;
}
-void QQuickNetworkReply::setOperation(QNetworkAccessManager::Operation operation)
+void QQuickNetworkReply::setData(const QVariant& data)
{
- m_networkReplyData->m_operation = operation;
+ m_data = data;
}
-QString QQuickNetworkReply::contentDisposition() const
-{
- return m_networkReplyData->m_contentDisposition;
-}
-
-void QQuickNetworkReply::setContentDisposition(const QString& disposition)
-{
- m_networkReplyData->m_contentDisposition = disposition;
-}
-
-QString QQuickNetworkReply::location() const
-{
- return m_networkReplyData->m_location;
-}
-
-void QQuickNetworkReply::setLocation(const QString& location)
-{
- m_networkReplyData->m_location = location;
-}
-
-QString QQuickNetworkReply::lastModified() const
-{
- return QDateTime::fromMSecsSinceEpoch(m_networkReplyData->m_lastModified).toString(Qt::ISODate);
-}
-
-void QQuickNetworkReply::setLastModified(const QString& lastModified)
-{
- m_networkReplyData->m_lastModified = QDateTime::fromString(lastModified, Qt::ISODate).toMSecsSinceEpoch();
-}
-
-QString QQuickNetworkReply::cookie() const
-{
- return m_networkReplyData->m_cookie;
-}
-
-void QQuickNetworkReply::setCookie(const QString& cookie)
-{
- m_networkReplyData->m_cookie = cookie;
-}
-
-QString QQuickNetworkReply::userAgent() const
-{
- return m_networkReplyData->m_userAgent;
-}
-
-void QQuickNetworkReply::setUserAgent(const QString& userAgent)
-{
- m_networkReplyData->m_userAgent = userAgent;
-}
-
-QString QQuickNetworkReply::server() const
-{
- return m_networkReplyData->m_server;
-}
-
-void QQuickNetworkReply::setServer(const QString& server)
-{
- m_networkReplyData->m_server = server;
-}
-
-QString QQuickNetworkReply::data() const
-{
- if (m_networkReplyData->m_dataHandle.isNull())
- return QString();
- RefPtr<SharedMemory> sm = SharedMemory::create(m_networkReplyData->m_dataHandle, SharedMemory::ReadOnly);
- if (!sm)
- return QString();
-
- uint64_t stringLength = m_networkReplyData->m_contentLength / sizeof(UChar);
- return QString(reinterpret_cast<const QChar*>(sm->data()), stringLength);
-}
-
-void QQuickNetworkReply::setData(const QString& data)
+void QQuickNetworkReply::send()
{
- // This function can be called several times. In this case the previous SharedMemory handles
- // will be overwritten and the previously allocated SharedMemory will die with the last handle.
- m_networkReplyData->m_contentLength = 0;
+ if (m_data.isNull())
+ return;
- if (data.isNull())
+ 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;
- const UChar* ucharData = reinterpret_cast<const UChar*>(data.constData());
- uint64_t smLength = sizeof(UChar) * data.length();
+ }
- RefPtr<SharedMemory> sm = SharedMemory::create(smLength);
- if (!sm)
+ WTF::RefPtr<WebKit::SharedMemory> sharedMemory = SharedMemory::create(smLength);
+ if (!sharedMemory)
return;
// The size of the allocated shared memory can be bigger than requested.
// Usually the size will be rounded up to the next multiple of a page size.
- memcpy(sm->data(), ucharData, smLength);
+ memcpy(sharedMemory->data(), ptrData, smLength);
- if (!sm->createHandle(m_networkReplyData->m_dataHandle, SharedMemory::ReadOnly))
- return;
- m_networkReplyData->m_contentLength = 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);
+ }
+
+ // After sending the reply data, we have to reinitialize the m_networkReplyData,
+ // to make sure we have a fresh SharesMemory::Handle.
+ m_networkReplyData = adoptRef(new WebKit::QtRefCountedNetworkReplyData);
}
-void QQuickNetworkReply::send()
+void QQuickNetworkReply::setWebViewExperimental(QQuickWebViewExperimental* webViewExperimental)
{
- QObject* schemeParent = parent()->parent();
- if (!schemeParent)
- return;
- QQuickWebViewExperimental* webViewExperimental = qobject_cast<QQuickWebViewExperimental*>(schemeParent->parent());
- if (!webViewExperimental)
- return;
- webViewExperimental->sendApplicationSchemeReply(this);
+ m_webViewExperimental = webViewExperimental;
}
-WTF::RefPtr<WebKit::QtNetworkRequestData> QQuickNetworkReply::networkRequestData() const
+WebKit::QtRefCountedNetworkRequestData* QQuickNetworkReply::networkRequestData() const
{
- return m_networkRequestData;
+ return m_networkRequestData.get();
}
-void QQuickNetworkReply::setNetworkRequestData(WTF::RefPtr<WebKit::QtNetworkRequestData> data)
+void QQuickNetworkReply::setNetworkRequestData(WTF::PassRefPtr<WebKit::QtRefCountedNetworkRequestData> data)
{
m_networkRequestData = data;
- m_networkReplyData->m_replyUuid = data->m_replyUuid;
+ m_networkReplyData->data().m_replyUuid = m_networkRequestData->data().m_replyUuid;
}
-WTF::RefPtr<WebKit::QtNetworkReplyData> QQuickNetworkReply::networkReplyData() const
+WebKit::QtRefCountedNetworkReplyData* QQuickNetworkReply::networkReplyData() const
{
- return m_networkReplyData;
+ return m_networkReplyData.get();
}
#include "moc_qquicknetworkreply_p.cpp"