diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2012-10-16 14:56:46 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2012-10-16 14:57:30 +0200 |
commit | b297e0fa5c217c9467033b7c8b46891a52870120 (patch) | |
tree | 43fc14689295e9e64f2719d05aad94e3049f6cd7 /Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp | |
parent | 69d517dbfa69903d8593cc1737f0474b21e3251e (diff) |
Revert "Imported WebKit commit 0dc6cd75e1d4836eaffbb520be96fac4847cc9d2 (http://svn.webkit.org/repository/webkit/trunk@131300)"
This reverts commit 5466563f4b5b6b86523e3f89bb7f77e5b5270c78.
Caused OOM issues on some CI machines :(
Diffstat (limited to 'Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp')
-rw-r--r-- | Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp | 143 |
1 files changed, 18 insertions, 125 deletions
diff --git a/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp index 8abcf8c07..116acb2d4 100644 --- a/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp +++ b/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2008, 2012 Digia Plc. and/or its subsidiary(-ies) + Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) Copyright (C) 2007 Staikos Computing Services Inc. <info@staikos.net> Copyright (C) 2008 Holger Hans Peter Freyther @@ -21,38 +21,44 @@ #include "config.h" #include "QNetworkReplyHandler.h" -#include "BlobRegistryImpl.h" #include "HTTPParsers.h" #include "MIMETypeRegistry.h" #include "ResourceHandle.h" #include "ResourceHandleClient.h" #include "ResourceHandleInternal.h" -#include "ResourceRequest.h" #include "ResourceResponse.h" +#include "ResourceRequest.h" #include <QDateTime> #include <QFile> #include <QFileInfo> -#include <QNetworkCookie> #include <QNetworkReply> +#include <QNetworkCookie> #include <wtf/text/CString.h> +#include <QDebug> #include <QCoreApplication> +// In Qt 4.8, the attribute for sending a request synchronously will be made public, +// for now, use this hackish solution for setting the internal attribute. +const QNetworkRequest::Attribute gSynchronousNetworkRequestAttribute = static_cast<QNetworkRequest::Attribute>(QNetworkRequest::HttpPipeliningWasUsedAttribute + 7); + static const int gMaxRedirections = 10; namespace WebCore { +// Take a deep copy of the FormDataElement FormDataIODevice::FormDataIODevice(FormData* data) - : m_currentFile(0) + : m_formElements(data ? data->elements() : Vector<FormDataElement>()) + , m_currentFile(0) , m_currentDelta(0) , m_fileSize(0) , m_dataSize(0) { setOpenMode(FormDataIODevice::ReadOnly); - prepareFormElements(data); - prepareCurrentElement(); + if (!m_formElements.isEmpty() && m_formElements[0].m_type == FormDataElement::encodedFile) + openFileForCurrentElement(); computeSize(); } @@ -61,71 +67,6 @@ FormDataIODevice::~FormDataIODevice() delete m_currentFile; } -#if ENABLE(BLOB) -static void appendBlobResolved(FormData* formData, const KURL& url) -{ - RefPtr<BlobStorageData> blobData = static_cast<BlobRegistryImpl&>(blobRegistry()).getBlobDataFromURL(KURL(ParsedURLString, url)); - if (blobData) { - BlobDataItemList::const_iterator it = blobData->items().begin(); - const BlobDataItemList::const_iterator itend = blobData->items().end(); - for (; it != itend; ++it) { - const BlobDataItem& blobItem = *it; - if (blobItem.type == BlobDataItem::Data) - formData->appendData(blobItem.data->data() + static_cast<int>(blobItem.offset), static_cast<int>(blobItem.length)); - else if (blobItem.type == BlobDataItem::File) - formData->appendFileRange(blobItem.path, blobItem.offset, blobItem.length, blobItem.expectedModificationTime); - else if (blobItem.type == BlobDataItem::Blob) - appendBlobResolved(formData, blobItem.url); - else - ASSERT_NOT_REACHED(); - } - } -} -#endif - -void FormDataIODevice::prepareFormElements(FormData* formData) -{ - if (!formData) - return; - -#if ENABLE(BLOB) - bool hasBlob = false; - Vector<FormDataElement>::const_iterator it = formData->elements().begin(); - const Vector<FormDataElement>::const_iterator itend = formData->elements().end(); - for (; it != itend; ++it) { - if (it->m_type == FormDataElement::encodedBlob) { - hasBlob = true; - break; - } - } - - // Resolve all blobs so we only have file and data. - if (hasBlob) { - RefPtr<FormData> newFormData = FormData::create(); - newFormData->setAlwaysStream(formData->alwaysStream()); - newFormData->setIdentifier(formData->identifier()); - it = formData->elements().begin(); - for (; it != itend; ++it) { - const FormDataElement& element = *it; - if (element.m_type == FormDataElement::data) - newFormData->appendData(element.m_data.data(), element.m_data.size()); - else if (element.m_type == FormDataElement::encodedFile) - newFormData->appendFileRange(element.m_filename, element.m_fileStart, element.m_fileLength, element.m_expectedFileModificationTime, element.m_shouldGenerateFile); - else if (element.m_type == FormDataElement::encodedBlob) - appendBlobResolved(newFormData.get(), element.m_url); - else - ASSERT_NOT_REACHED(); - } - m_formElements = newFormData->elements(); - return; - } -#endif - - // Take a deep copy of the FormDataElements - m_formElements = formData->elements(); -} - - qint64 FormDataIODevice::computeSize() { for (int i = 0; i < m_formElements.size(); ++i) { @@ -134,14 +75,7 @@ qint64 FormDataIODevice::computeSize() m_dataSize += element.m_data.size(); else { QFileInfo fi(element.m_filename); -#if ENABLE(BLOB) - qint64 fileEnd = fi.size(); - if (element.m_fileLength != BlobDataItem::toEndOfFile) - fileEnd = qMin<qint64>(fi.size(), element.m_fileStart + element.m_fileLength); - m_fileSize += qMax<qint64>(0, fileEnd - element.m_fileStart); -#else m_fileSize += fi.size(); -#endif } } return m_dataSize + m_fileSize; @@ -155,24 +89,10 @@ void FormDataIODevice::moveToNextElement() m_formElements.remove(0); - prepareCurrentElement(); -} - -void FormDataIODevice::prepareCurrentElement() -{ - if (m_formElements.isEmpty()) + if (m_formElements.isEmpty() || m_formElements[0].m_type == FormDataElement::data) return; - switch (m_formElements[0].m_type) { - case FormDataElement::data: - return; - case FormDataElement::encodedFile: - openFileForCurrentElement(); - break; - default: - // At this point encodedBlob should already have been handled. - ASSERT_NOT_REACHED(); - } + openFileForCurrentElement(); } void FormDataIODevice::openFileForCurrentElement() @@ -182,17 +102,6 @@ void FormDataIODevice::openFileForCurrentElement() m_currentFile->setFileName(m_formElements[0].m_filename); m_currentFile->open(QFile::ReadOnly); -#if ENABLE(BLOB) - if (isValidFileTime(m_formElements[0].m_expectedFileModificationTime)) { - QFileInfo info(*m_currentFile); - if (!info.exists() || static_cast<time_t>(m_formElements[0].m_expectedFileModificationTime) < info.lastModified().toTime_t()) { - moveToNextElement(); - return; - } - } - if (m_formElements[0].m_fileStart) - m_currentFile->seek(m_formElements[0].m_fileStart); -#endif } // m_formElements[0] is the current item. If the destination buffer is @@ -215,23 +124,13 @@ qint64 FormDataIODevice::readData(char* destination, qint64 size) if (m_currentDelta == element.m_data.size()) moveToNextElement(); - } else if (element.m_type == FormDataElement::encodedFile) { - quint64 toCopy = available; -#if ENABLE(BLOB) - if (element.m_fileLength != BlobDataItem::toEndOfFile) - toCopy = qMin<qint64>(toCopy, element.m_fileLength - m_currentDelta); -#endif - const QByteArray data = m_currentFile->read(toCopy); + } else { + const QByteArray data = m_currentFile->read(available); memcpy(destination+copied, data.constData(), data.size()); - m_currentDelta += data.size(); copied += data.size(); if (m_currentFile->atEnd() || !m_currentFile->isOpen()) moveToNextElement(); -#if ENABLE(BLOB) - else if (element.m_fileLength != BlobDataItem::toEndOfFile && m_currentDelta == element.m_fileLength) - moveToNextElement(); -#endif } } @@ -683,12 +582,6 @@ void QNetworkReplyHandler::uploadProgress(qint64 bytesSent, qint64 bytesTotal) if (!client) return; - if (!bytesTotal) { - // When finished QNetworkReply emits a progress of 0 bytes. - // Ignore that, to avoid firing twice. - return; - } - client->didSendData(m_resourceHandle, bytesSent, bytesTotal); } @@ -713,7 +606,7 @@ FormDataIODevice* QNetworkReplyHandler::getIODevice(const ResourceRequest& reque QNetworkReply* QNetworkReplyHandler::sendNetworkRequest(QNetworkAccessManager* manager, const ResourceRequest& request) { if (m_loadType == SynchronousLoad) - m_request.setAttribute(QNetworkRequest::SynchronousRequestAttribute, true); + m_request.setAttribute(gSynchronousNetworkRequestAttribute, true); if (!manager) return 0; |