[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

commit-queue at webkit.org commit-queue at webkit.org
Wed Dec 22 14:08:51 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 162742f259ffcd120086c82d1eb5db3cc4055fbd
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Oct 5 04:16:20 2010 +0000

    2010-10-04  Sriram Neelakandan  <sriram.neelakandan at 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):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@69064 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 8d8d69b..63ff6e7 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,21 @@
+2010-10-04  Sriram Neelakandan  <sriram.neelakandan at 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):
+
 2010-10-04  Chang Shu  <chang.shu at nokia.com>
 
         Reviewed by Antonio Gomes.
diff --git a/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
index 032dd4c..f0f4004 100644
--- a/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
+++ b/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
@@ -30,6 +30,7 @@
 #include "ResourceRequest.h"
 #include <QDateTime>
 #include <QFile>
+#include <QFileInfo>
 #include <QNetworkReply>
 #include <QNetworkCookie>
 #include <qwebframe.h>
@@ -59,11 +60,14 @@ FormDataIODevice::FormDataIODevice(FormData* data)
     : m_formElements(data ? data->elements() : Vector<FormDataElement>())
     , m_currentFile(0)
     , m_currentDelta(0)
+    , m_fileSize(0)
+    , m_dataSize(0)
 {
     setOpenMode(FormDataIODevice::ReadOnly);
 
     if (!m_formElements.isEmpty() && m_formElements[0].m_type == FormDataElement::encodedFile)
         openFileForCurrentElement();
+    computeSize();
 }
 
 FormDataIODevice::~FormDataIODevice()
@@ -71,6 +75,20 @@ FormDataIODevice::~FormDataIODevice()
     delete m_currentFile;
 }
 
+qint64 FormDataIODevice::computeSize() 
+{
+    for (int i = 0; i < m_formElements.size(); ++i) {
+        const FormDataElement& element = m_formElements[i];
+        if (element.m_type == FormDataElement::data) 
+            m_dataSize += element.m_data.size();
+        else {
+            QFileInfo fi(element.m_filename);
+            m_fileSize += fi.size();
+        }
+    }
+    return m_dataSize + m_fileSize;
+}
+
 void FormDataIODevice::moveToNextElement()
 {
     if (m_currentFile)
@@ -481,6 +499,9 @@ void QNetworkReplyHandler::start()
             break;
         case QNetworkAccessManager::PostOperation: {
             FormDataIODevice* postDevice = new FormDataIODevice(d->m_firstRequest.httpBody()); 
+            // We may be uploading files so prevent QNR from buffering data
+            m_request.setHeader(QNetworkRequest::ContentLengthHeader, postDevice->getFormDataSize());
+            m_request.setAttribute(QNetworkRequest::DoNotBufferUploadDataAttribute, QVariant(true));
             m_reply = manager->post(m_request, postDevice);
             postDevice->setParent(m_reply);
             break;
@@ -490,6 +511,9 @@ void QNetworkReplyHandler::start()
             break;
         case QNetworkAccessManager::PutOperation: {
             FormDataIODevice* putDevice = new FormDataIODevice(d->m_firstRequest.httpBody()); 
+            // We may be uploading files so prevent QNR from buffering data
+            m_request.setHeader(QNetworkRequest::ContentLengthHeader, putDevice->getFormDataSize());
+            m_request.setAttribute(QNetworkRequest::DoNotBufferUploadDataAttribute, QVariant(true));
             m_reply = manager->put(m_request, putDevice);
             putDevice->setParent(m_reply);
             break;
diff --git a/WebCore/platform/network/qt/QNetworkReplyHandler.h b/WebCore/platform/network/qt/QNetworkReplyHandler.h
index f6b2358..b64d5ff 100644
--- a/WebCore/platform/network/qt/QNetworkReplyHandler.h
+++ b/WebCore/platform/network/qt/QNetworkReplyHandler.h
@@ -97,6 +97,7 @@ public:
     ~FormDataIODevice();
 
     bool isSequential() const;
+    qint64 getFormDataSize() const { return m_fileSize + m_dataSize; }
 
 protected:
     qint64 readData(char*, qint64);
@@ -104,12 +105,15 @@ protected:
 
 private:
     void moveToNextElement();
+    qint64 computeSize();
     void openFileForCurrentElement();
 
 private:
     Vector<FormDataElement> m_formElements;
     QFile* m_currentFile;
     qint64 m_currentDelta;
+    qint64 m_fileSize;
+    qint64 m_dataSize;
 };
 
 }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list