Changeset 69064 in webkit


Ignore:
Timestamp:
Oct 4, 2010 9:16:20 PM (14 years ago)
Author:
commit-queue@webkit.org
Message:

2010-10-04 Sriram Neelakandan <sriram.neelakandan@gmail.com>

Reviewed by Andreas Kling.

[Qt] QNetworkReplyHandler forces buffered output for FormData with files
https://bugs.webkit.org/show_bug.cgi?id=46259

No new tests. Existing form submit tests should cover this change.

  • platform/network/qt/QNetworkReplyHandler.cpp: (WebCore::FormDataIODevice::FormDataIODevice): (WebCore::FormDataIODevice::computeSize): Add computeSize() for computing form device size (WebCore::QNetworkReplyHandler::start): Call computeSize(), fill Content-Length and prevent UploadData buffering
  • platform/network/qt/QNetworkReplyHandler.h: (WebCore::FormDataIODevice::getFormDataSize):
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r69063 r69064  
     12010-10-04  Sriram Neelakandan  <sriram.neelakandan@gmail.com>
     2
     3        Reviewed by Andreas Kling.
     4
     5        [Qt] QNetworkReplyHandler forces buffered output for FormData with files
     6        https://bugs.webkit.org/show_bug.cgi?id=46259
     7
     8        No new tests. Existing form submit tests should cover this change.
     9
     10        * platform/network/qt/QNetworkReplyHandler.cpp:
     11        (WebCore::FormDataIODevice::FormDataIODevice):
     12        (WebCore::FormDataIODevice::computeSize):
     13         Add computeSize() for computing form device size
     14        (WebCore::QNetworkReplyHandler::start):
     15         Call computeSize(), fill Content-Length and prevent UploadData buffering
     16        * platform/network/qt/QNetworkReplyHandler.h:
     17        (WebCore::FormDataIODevice::getFormDataSize):
     18
    1192010-10-04  Chang Shu  <chang.shu@nokia.com>
    220
  • trunk/WebCore/platform/network/qt/QNetworkReplyHandler.cpp

    r68906 r69064  
    3131#include <QDateTime>
    3232#include <QFile>
     33#include <QFileInfo>
    3334#include <QNetworkReply>
    3435#include <QNetworkCookie>
     
    6061    , m_currentFile(0)
    6162    , m_currentDelta(0)
     63    , m_fileSize(0)
     64    , m_dataSize(0)
    6265{
    6366    setOpenMode(FormDataIODevice::ReadOnly);
     
    6568    if (!m_formElements.isEmpty() && m_formElements[0].m_type == FormDataElement::encodedFile)
    6669        openFileForCurrentElement();
     70    computeSize();
    6771}
    6872
     
    7074{
    7175    delete m_currentFile;
     76}
     77
     78qint64 FormDataIODevice::computeSize()
     79{
     80    for (int i = 0; i < m_formElements.size(); ++i) {
     81        const FormDataElement& element = m_formElements[i];
     82        if (element.m_type == FormDataElement::data)
     83            m_dataSize += element.m_data.size();
     84        else {
     85            QFileInfo fi(element.m_filename);
     86            m_fileSize += fi.size();
     87        }
     88    }
     89    return m_dataSize + m_fileSize;
    7290}
    7391
     
    482500        case QNetworkAccessManager::PostOperation: {
    483501            FormDataIODevice* postDevice = new FormDataIODevice(d->m_firstRequest.httpBody());
     502            // We may be uploading files so prevent QNR from buffering data
     503            m_request.setHeader(QNetworkRequest::ContentLengthHeader, postDevice->getFormDataSize());
     504            m_request.setAttribute(QNetworkRequest::DoNotBufferUploadDataAttribute, QVariant(true));
    484505            m_reply = manager->post(m_request, postDevice);
    485506            postDevice->setParent(m_reply);
     
    491512        case QNetworkAccessManager::PutOperation: {
    492513            FormDataIODevice* putDevice = new FormDataIODevice(d->m_firstRequest.httpBody());
     514            // We may be uploading files so prevent QNR from buffering data
     515            m_request.setHeader(QNetworkRequest::ContentLengthHeader, putDevice->getFormDataSize());
     516            m_request.setAttribute(QNetworkRequest::DoNotBufferUploadDataAttribute, QVariant(true));
    493517            m_reply = manager->put(m_request, putDevice);
    494518            putDevice->setParent(m_reply);
  • trunk/WebCore/platform/network/qt/QNetworkReplyHandler.h

    r62228 r69064  
    9898
    9999    bool isSequential() const;
     100    qint64 getFormDataSize() const { return m_fileSize + m_dataSize; }
    100101
    101102protected:
     
    105106private:
    106107    void moveToNextElement();
     108    qint64 computeSize();
    107109    void openFileForCurrentElement();
    108110
     
    111113    QFile* m_currentFile;
    112114    qint64 m_currentDelta;
     115    qint64 m_fileSize;
     116    qint64 m_dataSize;
    113117};
    114118
Note: See TracChangeset for help on using the changeset viewer.