Changeset 88612 in webkit


Ignore:
Timestamp:
Jun 12, 2011 4:51:45 AM (13 years ago)
Author:
robert@webkit.org
Message:

2011-06-12 Robert Hogan <robert@webkit.org>

Reviewed by Andreas Kling.

[Qt] Fix methods.html and methods-lower-case.html
https://bugs.webkit.org/show_bug.cgi?id=62221

Our expectations for the unskipped tests have the following differences from the mac
platform:

  • POST requests with no data get a default Content-Type of 'application/octet-stream' in Qt 4.8 and 'application/x-www-form-urlencoded' in Qt 4.7.3. This is Qt-defined behaviour in QNetworkAccessManager (see QHttpNetworkRequestPrivate::header in qhttpnetworkrequest.cpp)
  • DELETE and HEAD requests get their ContentType and ContentLength headers (if present) removed by QNetworkReplyHandler. QtWebKit does not send data for either of these request types.
  • platform/qt-4.8/http/tests/xmlhttprequest/methods-expected.txt: Added.
  • platform/qt-4.8/http/tests/xmlhttprequest/workers/methods-async-expected.txt: Added.
  • platform/qt-4.8/http/tests/xmlhttprequest/workers/methods-expected.txt: Added.
  • platform/qt-4.8/http/tests/xmlhttprequest/workers/shared-worker-methods-async-expected.txt: Added.
  • platform/qt/Skipped: Unskip: http/tests/xmlhttprequest/methods.html

http/tests/xmlhttprequest/methods-lower-case.html
http/tests/xmlhttprequest/workers/methods-async.html
http/tests/xmlhttprequest/workers/methods.html
http/tests/xmlhttprequest/workers/shared-worker-methods-async.html

  • platform/qt/http/tests/xmlhttprequest/methods-expected.txt: Added.
  • platform/qt/http/tests/xmlhttprequest/workers/methods-async-expected.txt: Added.
  • platform/qt/http/tests/xmlhttprequest/workers/methods-expected.txt: Added.
  • platform/qt/http/tests/xmlhttprequest/workers/shared-worker-methods-async-expected.txt: Added.

2011-06-12 Robert Hogan <robert@webkit.org>

Reviewed by Andreas Kling.

[Qt] Fix methods.html and methods-lower-case.html
https://bugs.webkit.org/show_bug.cgi?id=62221

  • platform/network/qt/QNetworkReplyHandler.cpp: (WebCore::QNetworkReplyHandler::clearContentsHeaders): Refactor code from sendNetworkRequest (WebCore::QNetworkReplyHandler::getIODevice): ditto (WebCore::QNetworkReplyHandler::sendNetworkRequest):
    • Remove ContentType and ContentLength headers from GET, DELETE and HEAD requests since we do not send data with any of these requests.
    • If a custom HTTP operation contains data, send it.
  • platform/network/qt/QNetworkReplyHandler.h:
Location:
trunk
Files:
13 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r88608 r88612  
     12011-06-12  Robert Hogan  <robert@webkit.org>
     2
     3        Reviewed by Andreas Kling.
     4
     5        [Qt] Fix methods.html and methods-lower-case.html
     6        https://bugs.webkit.org/show_bug.cgi?id=62221
     7
     8        Our expectations for the unskipped tests have the following differences from the mac
     9        platform:
     10          - POST requests with no data get a default Content-Type of 'application/octet-stream' in
     11            Qt 4.8 and 'application/x-www-form-urlencoded' in Qt 4.7.3.
     12            This is Qt-defined behaviour in QNetworkAccessManager (see QHttpNetworkRequestPrivate::header
     13            in qhttpnetworkrequest.cpp)
     14          - DELETE and HEAD requests get their ContentType and ContentLength headers (if present) removed
     15            by QNetworkReplyHandler. QtWebKit does not send data for either of these request types.
     16
     17        * platform/qt-4.8/http/tests/xmlhttprequest/methods-expected.txt: Added.
     18        * platform/qt-4.8/http/tests/xmlhttprequest/workers/methods-async-expected.txt: Added.
     19        * platform/qt-4.8/http/tests/xmlhttprequest/workers/methods-expected.txt: Added.
     20        * platform/qt-4.8/http/tests/xmlhttprequest/workers/shared-worker-methods-async-expected.txt: Added.
     21        * platform/qt/Skipped: Unskip: http/tests/xmlhttprequest/methods.html
     22                                       http/tests/xmlhttprequest/methods-lower-case.html
     23                                       http/tests/xmlhttprequest/workers/methods-async.html
     24                                       http/tests/xmlhttprequest/workers/methods.html
     25                                       http/tests/xmlhttprequest/workers/shared-worker-methods-async.html
     26        * platform/qt/http/tests/xmlhttprequest/methods-expected.txt: Added.
     27        * platform/qt/http/tests/xmlhttprequest/workers/methods-async-expected.txt: Added.
     28        * platform/qt/http/tests/xmlhttprequest/workers/methods-expected.txt: Added.
     29        * platform/qt/http/tests/xmlhttprequest/workers/shared-worker-methods-async-expected.txt: Added.
     30
    1312011-06-11  Ryosuke Niwa  <rniwa@webkit.org>
    232
  • trunk/LayoutTests/platform/qt/Skipped

    r88527 r88612  
    368368http/tests/xmlhttprequest/cross-origin-authorization.html
    369369http/tests/xmlhttprequest/cross-origin-no-authorization.html
    370 http/tests/xmlhttprequest/methods-lower-case.html
    371 http/tests/xmlhttprequest/methods.html
    372370http/tests/xmlhttprequest/redirect-cross-origin-tripmine.html
    373 http/tests/xmlhttprequest/workers/methods-async.html
    374 http/tests/xmlhttprequest/workers/methods.html
    375 http/tests/xmlhttprequest/workers/shared-worker-methods-async.html
    376371
    377372# =========================================================================== #
  • trunk/Source/WebCore/ChangeLog

    r88611 r88612  
     12011-06-12  Robert Hogan  <robert@webkit.org>
     2
     3        Reviewed by Andreas Kling.
     4
     5        [Qt] Fix methods.html and methods-lower-case.html
     6        https://bugs.webkit.org/show_bug.cgi?id=62221
     7
     8        * platform/network/qt/QNetworkReplyHandler.cpp:
     9        (WebCore::QNetworkReplyHandler::clearContentsHeaders): Refactor code from sendNetworkRequest
     10        (WebCore::QNetworkReplyHandler::getIODevice): ditto
     11        (WebCore::QNetworkReplyHandler::sendNetworkRequest):
     12            - Remove ContentType and ContentLength headers from GET, DELETE and HEAD requests since
     13              we do not send data with any of these requests.
     14            - If a custom HTTP operation contains data, send it.
     15        * platform/network/qt/QNetworkReplyHandler.h:
     16
    1172011-06-11  Michael Saboff  <msaboff@apple.com>
    218
  • trunk/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp

    r86693 r88612  
    599599}
    600600
     601void QNetworkReplyHandler::clearContentHeaders()
     602{
     603    // Clearing Content-length and Content-type of the requests that do not have contents.
     604    // This is necessary to ensure POST requests redirected to GETs do not leak metadata
     605    // about the POST content to the site they've been redirected to.
     606    m_request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant());
     607    m_request.setHeader(QNetworkRequest::ContentLengthHeader, QVariant());
     608}
     609
     610FormDataIODevice* QNetworkReplyHandler::getIODevice(const ResourceRequest& request)
     611{
     612    FormDataIODevice* device = new FormDataIODevice(request.httpBody());
     613    // We may be uploading files so prevent QNR from buffering data.
     614    m_request.setHeader(QNetworkRequest::ContentLengthHeader, device->getFormDataSize());
     615    m_request.setAttribute(QNetworkRequest::DoNotBufferUploadDataAttribute, QVariant(true));
     616    return device;
     617}
     618
    601619QNetworkReply* QNetworkReplyHandler::sendNetworkRequest(QNetworkAccessManager* manager, const ResourceRequest& request)
    602620{
     
    616634        m_method = QNetworkAccessManager::GetOperation;
    617635
    618     if (m_method != QNetworkAccessManager::PostOperation && m_method != QNetworkAccessManager::PutOperation) {
    619         // clearing Contents-length and Contents-type of the requests that do not have contents.
    620         m_request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant());
    621         m_request.setHeader(QNetworkRequest::ContentLengthHeader, QVariant());
    622     }
    623 
    624636    switch (m_method) {
    625637        case QNetworkAccessManager::GetOperation:
     638            clearContentHeaders();
    626639            return manager->get(m_request);
    627640        case QNetworkAccessManager::PostOperation: {
    628             FormDataIODevice* postDevice = new FormDataIODevice(request.httpBody());
    629             // We may be uploading files so prevent QNR from buffering data
    630             m_request.setHeader(QNetworkRequest::ContentLengthHeader, postDevice->getFormDataSize());
    631             m_request.setAttribute(QNetworkRequest::DoNotBufferUploadDataAttribute, QVariant(true));
     641            FormDataIODevice* postDevice = getIODevice(request);
    632642            QNetworkReply* result = manager->post(m_request, postDevice);
    633643            postDevice->setParent(result);
     
    635645        }
    636646        case QNetworkAccessManager::HeadOperation:
     647            clearContentHeaders();
    637648            return manager->head(m_request);
    638649        case QNetworkAccessManager::PutOperation: {
    639             FormDataIODevice* putDevice = new FormDataIODevice(request.httpBody());
    640             // We may be uploading files so prevent QNR from buffering data
    641             m_request.setHeader(QNetworkRequest::ContentLengthHeader, putDevice->getFormDataSize());
    642             m_request.setAttribute(QNetworkRequest::DoNotBufferUploadDataAttribute, QVariant(true));
     650            FormDataIODevice* putDevice = getIODevice(request);
    643651            QNetworkReply* result = manager->put(m_request, putDevice);
    644652            putDevice->setParent(result);
     
    646654        }
    647655        case QNetworkAccessManager::DeleteOperation: {
     656            clearContentHeaders();
    648657            return manager->deleteResource(m_request);
    649658        }
    650         case QNetworkAccessManager::CustomOperation:
    651             return manager->sendCustomRequest(m_request, m_resourceHandle->firstRequest().httpMethod().latin1().data());
     659        case QNetworkAccessManager::CustomOperation: {
     660            FormDataIODevice* customDevice = getIODevice(request);
     661            QNetworkReply* result = manager->sendCustomRequest(m_request, m_resourceHandle->firstRequest().httpMethod().latin1().data(), customDevice);
     662            customDevice->setParent(result);
     663            return result;
     664        }
    652665        case QNetworkAccessManager::UnknownOperation:
    653666            ASSERT_NOT_REACHED();
  • trunk/Source/WebCore/platform/network/qt/QNetworkReplyHandler.h

    r85734 r88612  
    3636namespace WebCore {
    3737
     38class FormDataIODevice;
    3839class ResourceHandle;
    3940class ResourceRequest;
     
    141142    bool wasAborted() const { return !m_resourceHandle; }
    142143    QNetworkReply* sendNetworkRequest(QNetworkAccessManager*, const ResourceRequest&);
     144    FormDataIODevice* getIODevice(const ResourceRequest&);
     145    void clearContentHeaders();
    143146
    144147    OwnPtr<QNetworkReplyWrapper> m_replyWrapper;
Note: See TracChangeset for help on using the changeset viewer.