Changeset 84057 in webkit


Ignore:
Timestamp:
Apr 15, 2011 5:05:36 PM (13 years ago)
Author:
luiz@webkit.org
Message:

[Qt] QWebPage MIME type handling inconsistency with other web browsers
https://bugs.webkit.org/show_bug.cgi?id=46968

Source/WebCore:

Reviewed by Kenneth Rohde Christiansen.

Implementing mime type sniffing based on
http://tools.ietf.org/html/draft-abarth-mime-sniff-06.

  • WebCore.pro:
  • platform/network/MIMESniffing.cpp: Added.

(MagicNumbers::dataSizeNeededForImageSniffing):
(MagicNumbers::maskedCompare):
(MagicNumbers::checkSpaceOrBracket):
(MagicNumbers::compare):
(MagicNumbers::findMIMEType):
(MagicNumbers::findSimpleMIMEType):
(MagicNumbers::textOrBinaryTypeSniffingProcedure):
(MagicNumbers::unknownTypeSniffingProcedure):
(MagicNumbers::imageTypeSniffingProcedure):
(MagicNumbers::checkText):
(MagicNumbers::checkRDF):
(MagicNumbers::skipTag):
(MagicNumbers::feedTypeSniffingProcedure):
(MIMESniffer::MIMESniffer):

  • platform/network/MIMESniffing.h: Added.

(MIMESniffer::dataSize):
(MIMESniffer::sniff):
(MIMESniffer::isValid):

  • platform/network/NetworkingContext.h:
  • platform/network/qt/QNetworkReplyHandler.cpp:

(WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
(WebCore::QNetworkReplyWrapper::release):
(WebCore::QNetworkReplyWrapper::receiveMetaData):
(WebCore::QNetworkReplyWrapper::receiveSniffedMIMEType):
(WebCore::QNetworkReplyWrapper::emitMetaDataChanged):
(WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
(WebCore::QNetworkReplyHandler::sendNetworkRequest):
(WebCore::QNetworkReplyHandler::start):

  • platform/network/qt/QNetworkReplyHandler.h:

(WebCore::QNetworkReplyWrapper::advertisedMIMEType):
(WebCore::QNetworkReplyWrapper::mimeType):

  • platform/network/qt/QtMIMETypeSniffer.cpp: Added.

(QtMIMETypeSniffer::QtMIMETypeSniffer):
(QtMIMETypeSniffer::sniff):
(QtMIMETypeSniffer::trySniffing):

  • platform/network/qt/QtMIMETypeSniffer.h: Added.

(QtMIMETypeSniffer::mimeType):
(QtMIMETypeSniffer::isFinished):

Source/WebKit/qt:

Reviewed by Kenneth Rohde Christiansen.

Implementing mime type sniffing based on
http://tools.ietf.org/html/draft-abarth-mime-sniff-06.

  • WebCoreSupport/FrameLoaderClientQt.cpp:

(WebCore::FrameLoaderClientQt::createNetworkingContext):

  • WebCoreSupport/FrameNetworkingContextQt.cpp:

(WebCore::FrameNetworkingContextQt::FrameNetworkingContextQt):
(WebCore::FrameNetworkingContextQt::create):
(WebCore::FrameNetworkingContextQt::MIMESniffingEnabled):

  • WebCoreSupport/FrameNetworkingContextQt.h:
  • tests/MIMESniffing/MIMESniffing.pro: Added.
  • tests/MIMESniffing/TestData.h: Added.
  • tests/MIMESniffing/resources.qrc: Added.
  • tests/MIMESniffing/resources/application_atom+xml: Added.
  • tests/MIMESniffing/resources/application_ogg: Added.
  • tests/MIMESniffing/resources/application_pdf: Added.
  • tests/MIMESniffing/resources/application_postscript: Added.
  • tests/MIMESniffing/resources/application_rdf+xml: Added.
  • tests/MIMESniffing/resources/application_rss+xml: Added.
  • tests/MIMESniffing/resources/application_x-gzip: Added.
  • tests/MIMESniffing/resources/application_x-rar-compressed: Added.
  • tests/MIMESniffing/resources/application_zip: Added.
  • tests/MIMESniffing/resources/audio_x-wave: Added.
  • tests/MIMESniffing/resources/image_bmp: Added.
  • tests/MIMESniffing/resources/image_gif: Added.
  • tests/MIMESniffing/resources/image_jpeg: Added.
  • tests/MIMESniffing/resources/image_png: Added.
  • tests/MIMESniffing/resources/image_vnd.microsoft.icon: Added.
  • tests/MIMESniffing/resources/image_webp: Added.
  • tests/MIMESniffing/resources/text_html: Added.
  • tests/MIMESniffing/resources/text_xml: Added.
  • tests/MIMESniffing/resources/video_webm: Added.
  • tests/MIMESniffing/tst_MIMESniffing.cpp: Added.

(tst_MIMESniffing::tst_MIMESniffing):
(errorText):
(tst_MIMESniffing::testCase1):

  • tests/tests.pro:

Source/WebKit2:

Reviewed by Kenneth Rohde Christiansen.

Implementing mime type sniffing based on
http://tools.ietf.org/html/draft-abarth-mime-sniff-06.

  • WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp:

(WebCore::WebFrameNetworkingContext::WebFrameNetworkingContext):
(WebCore::WebFrameNetworkingContext::MIMESniffingEnabled):

  • WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.h:

LayoutTests:

Rubberstamped by Andreas Kling.

Unskipping http/tests/loading/text-content-type-with-binary-extension.html.

  • platform/qt/Skipped:
Location:
trunk
Files:
27 added
15 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r84056 r84057  
     12011-04-15  Luiz Agostini  <luiz.agostini@openbossa.org>
     2
     3        Rubberstamped by Andreas Kling.
     4
     5        [Qt] QWebPage MIME type handling inconsistency with other web browsers
     6        https://bugs.webkit.org/show_bug.cgi?id=46968
     7
     8        Unskipping http/tests/loading/text-content-type-with-binary-extension.html.
     9
     10        * platform/qt/Skipped:
     11
    1122011-04-15  Emil A Eklund  <eae@chromium.org>
    213
  • trunk/LayoutTests/platform/qt/Skipped

    r84053 r84057  
    241241http/tests/media
    242242http/tests/wml
    243 
    244 # - content sniffing - Binary data not loaded as text.
    245 http/tests/loading/text-content-type-with-binary-extension.html
    246243
    247244# drag n drop support again
  • trunk/Source/WebCore/ChangeLog

    r84056 r84057  
     12011-04-08  Luiz Agostini  <luiz.agostini@openbossa.org>
     2
     3        Reviewed by Kenneth Rohde Christiansen.
     4
     5        [Qt] QWebPage MIME type handling inconsistency with other web browsers
     6        https://bugs.webkit.org/show_bug.cgi?id=46968
     7
     8        Implementing mime type sniffing based on
     9        http://tools.ietf.org/html/draft-abarth-mime-sniff-06.
     10
     11        * WebCore.pro:
     12        * platform/network/MIMESniffing.cpp: Added.
     13        (MagicNumbers::dataSizeNeededForImageSniffing):
     14        (MagicNumbers::maskedCompare):
     15        (MagicNumbers::checkSpaceOrBracket):
     16        (MagicNumbers::compare):
     17        (MagicNumbers::findMIMEType):
     18        (MagicNumbers::findSimpleMIMEType):
     19        (MagicNumbers::textOrBinaryTypeSniffingProcedure):
     20        (MagicNumbers::unknownTypeSniffingProcedure):
     21        (MagicNumbers::imageTypeSniffingProcedure):
     22        (MagicNumbers::checkText):
     23        (MagicNumbers::checkRDF):
     24        (MagicNumbers::skipTag):
     25        (MagicNumbers::feedTypeSniffingProcedure):
     26        (MIMESniffer::MIMESniffer):
     27        * platform/network/MIMESniffing.h: Added.
     28        (MIMESniffer::dataSize):
     29        (MIMESniffer::sniff):
     30        (MIMESniffer::isValid):
     31        * platform/network/NetworkingContext.h:
     32        * platform/network/qt/QNetworkReplyHandler.cpp:
     33        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
     34        (WebCore::QNetworkReplyWrapper::release):
     35        (WebCore::QNetworkReplyWrapper::receiveMetaData):
     36        (WebCore::QNetworkReplyWrapper::receiveSniffedMIMEType):
     37        (WebCore::QNetworkReplyWrapper::emitMetaDataChanged):
     38        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
     39        (WebCore::QNetworkReplyHandler::sendNetworkRequest):
     40        (WebCore::QNetworkReplyHandler::start):
     41        * platform/network/qt/QNetworkReplyHandler.h:
     42        (WebCore::QNetworkReplyWrapper::advertisedMIMEType):
     43        (WebCore::QNetworkReplyWrapper::mimeType):
     44        * platform/network/qt/QtMIMETypeSniffer.cpp: Added.
     45        (QtMIMETypeSniffer::QtMIMETypeSniffer):
     46        (QtMIMETypeSniffer::sniff):
     47        (QtMIMETypeSniffer::trySniffing):
     48        * platform/network/qt/QtMIMETypeSniffer.h: Added.
     49        (QtMIMETypeSniffer::mimeType):
     50        (QtMIMETypeSniffer::isFinished):
     51
    1522011-04-15  Emil A Eklund  <eae@chromium.org>
    253
  • trunk/Source/WebCore/WebCore.pro

    r84039 r84057  
    20022002    platform/network/HTTPHeaderMap.h \
    20032003    platform/network/HTTPParsers.h \
     2004    platform/network/MIMESniffing.h \
    20042005    platform/network/NetworkingContext.h \
    20052006    platform/network/NetworkStateNotifier.h \
    20062007    platform/network/ProtectionSpace.h \
    20072008    platform/network/ProxyServer.h \
     2009    platform/network/qt/QtMIMETypeSniffer.h \
    20082010    platform/network/qt/QNetworkReplyHandler.h \
    20092011    platform/network/ResourceErrorBase.h \
     
    25172519    platform/graphics/qt/PatternQt.cpp \
    25182520    platform/graphics/qt/StillImageQt.cpp \
     2521    platform/network/MIMESniffing.cpp \
    25192522    platform/network/qt/CredentialStorageQt.cpp \
    25202523    platform/network/qt/ResourceHandleQt.cpp \
     
    25222525    platform/network/qt/DnsPrefetchHelper.cpp \
    25232526    platform/network/qt/ProxyServerQt.cpp \
     2527    platform/network/qt/QtMIMETypeSniffer.cpp \
    25242528    platform/network/qt/QNetworkReplyHandler.cpp \
    25252529    editing/qt/EditorQt.cpp \
  • trunk/Source/WebCore/platform/network/MIMESniffing.h

    r84056 r84057  
    11/*
    2     Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
     2    Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
    33
    44    This library is free software; you can redistribute it and/or
     
    1818*/
    1919
    20 #ifndef WebFrameNetworkingContext_h
    21 #define WebFrameNetworkingContext_h
     20#ifndef MIMESniffing_h
     21#define MIMESniffing_h
    2222
    23 #include <WebCore/FrameNetworkingContext.h>
     23#include <stddef.h>
    2424
    25 namespace WebCore {
     25// MIME type sniffing implementation based on http://tools.ietf.org/html/draft-abarth-mime-sniff-06
    2626
    27 class WebFrameNetworkingContext : public FrameNetworkingContext {
     27class MIMESniffer {
    2828public:
    29     static PassRefPtr<WebFrameNetworkingContext> create(Frame*);
     29    MIMESniffer(const char* advertisedMIMEType, bool isSupportedImageType);
     30
     31    size_t dataSize() const { return m_dataSize; }
     32    const char* sniff(const char* data, size_t size) const { return m_function ?  m_function(data, size) : 0; }
     33    bool isValid() const { return m_dataSize > 0; }
    3034
    3135private:
    32     WebFrameNetworkingContext(Frame*);
    33 
    34     virtual QObject* originatingObject() const;
    35     virtual QNetworkAccessManager* networkAccessManager() const;
    36 
    37     QObject* m_originatingObject;
     36    typedef const char* (*SniffFunction)(const char*, size_t);
     37    size_t m_dataSize;
     38    SniffFunction m_function;
    3839};
    3940
    40 }
    41 
    42 #endif // WebFrameNetworkingContext_h
     41#endif // MIMESniffing_h
  • trunk/Source/WebCore/platform/network/NetworkingContext.h

    r74741 r84057  
    5959    virtual QObject* originatingObject() const = 0;
    6060    virtual QNetworkAccessManager* networkAccessManager() const = 0;
     61    virtual bool mimeSniffingEnabled() const = 0;
    6162#endif
    6263
  • trunk/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp

    r84018 r84057  
    206206};
    207207
    208 QNetworkReplyWrapper::QNetworkReplyWrapper(QNetworkReplyHandlerCallQueue* queue, QNetworkReply* reply, QObject* parent)
     208QNetworkReplyWrapper::QNetworkReplyWrapper(QNetworkReplyHandlerCallQueue* queue, QNetworkReply* reply, bool sniffMIMETypes, QObject* parent)
    209209    : QObject(parent)
    210210    , m_reply(reply)
    211211    , m_queue(queue)
    212212    , m_responseContainsData(false)
     213    , m_sniffer(0)
     214    , m_sniffMIMETypes(sniffMIMETypes)
    213215{
    214216    Q_ASSERT(m_reply);
     
    233235    QNetworkReply* reply = m_reply;
    234236    m_reply = 0;
     237    m_sniffer = 0;
     238
    235239    reply->setParent(0);
    236240    return reply;
     
    249253    resetConnections();
    250254
    251     QueueLocker lock(m_queue);
     255
     256    WTF::String contentType = m_reply->header(QNetworkRequest::ContentTypeHeader).toString();
     257    m_encoding = extractCharsetFromMediaType(contentType);
     258    m_advertisedMIMEType = extractMIMETypeFromMediaType(contentType);
    252259
    253260    m_redirectionTargetUrl = m_reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
    254261    if (m_redirectionTargetUrl.isValid()) {
     262        QueueLocker lock(m_queue);
    255263        m_queue->push(&QNetworkReplyHandler::sendResponseIfNeeded);
    256264        m_queue->push(&QNetworkReplyHandler::finish);
     
    258266    }
    259267
    260     WTF::String contentType = m_reply->header(QNetworkRequest::ContentTypeHeader).toString();
    261     m_encoding = extractCharsetFromMediaType(contentType);
    262     m_advertisedMimeType = extractMIMETypeFromMediaType(contentType);
    263 
     268    if (!m_sniffMIMETypes) {
     269        emitMetaDataChanged();
     270        return;
     271    }
     272
     273    bool isSupportedImageType = MIMETypeRegistry::isSupportedImageMIMEType(m_advertisedMIMEType);
     274
     275    Q_ASSERT(!m_sniffer);
     276
     277    m_sniffer = new QtMIMETypeSniffer(m_reply, m_advertisedMIMEType, isSupportedImageType);
     278
     279    if (m_sniffer->isFinished()) {
     280        receiveSniffedMIMEType();
     281        return;
     282    }
     283
     284    connect(m_sniffer.get(), SIGNAL(finished()), this, SLOT(receiveSniffedMIMEType()));
     285}
     286
     287void QNetworkReplyWrapper::receiveSniffedMIMEType()
     288{
     289    Q_ASSERT(m_sniffer);
     290
     291    m_sniffedMIMEType = m_sniffer->mimeType();
     292    m_sniffer = 0;
     293
     294    emitMetaDataChanged();
     295}
     296
     297void QNetworkReplyWrapper::emitMetaDataChanged()
     298{
     299    QueueLocker lock(m_queue);
    264300    m_queue->push(&QNetworkReplyHandler::sendResponseIfNeeded);
    265301
     
    424460        return;
    425461
    426     WTF::String contentType = m_replyWrapper->reply()->header(QNetworkRequest::ContentTypeHeader).toString();
    427     WTF::String encoding = extractCharsetFromMediaType(contentType);
    428     WTF::String mimeType = extractMIMETypeFromMediaType(contentType);
     462    WTF::String mimeType = m_replyWrapper->mimeType();
    429463
    430464    if (mimeType.isEmpty()) {
     
    436470    ResourceResponse response(url, mimeType.lower(),
    437471                              m_replyWrapper->reply()->header(QNetworkRequest::ContentLengthHeader).toLongLong(),
    438                               encoding, String());
     472                              m_replyWrapper->encoding(), String());
    439473
    440474    if (url.isLocalFile()) {
     
    545579}
    546580
    547 QNetworkReply* QNetworkReplyHandler::sendNetworkRequest()
     581QNetworkReply* QNetworkReplyHandler::sendNetworkRequest(QNetworkAccessManager* manager, const ResourceRequest& request)
    548582{
    549583    if (m_loadType == SynchronousLoad)
    550584        m_request.setAttribute(gSynchronousNetworkRequestAttribute, true);
    551 
    552     ResourceHandleInternal* d = m_resourceHandle->getInternal();
    553 
    554     QNetworkAccessManager* manager = 0;
    555     if (d->m_context)
    556         manager = d->m_context->networkAccessManager();
    557585
    558586    if (!manager)
     
    572600            return manager->get(m_request);
    573601        case QNetworkAccessManager::PostOperation: {
    574             FormDataIODevice* postDevice = new FormDataIODevice(d->m_firstRequest.httpBody());
     602            FormDataIODevice* postDevice = new FormDataIODevice(request.httpBody());
    575603            // We may be uploading files so prevent QNR from buffering data
    576604            m_request.setHeader(QNetworkRequest::ContentLengthHeader, postDevice->getFormDataSize());
     
    583611            return manager->head(m_request);
    584612        case QNetworkAccessManager::PutOperation: {
    585             FormDataIODevice* putDevice = new FormDataIODevice(d->m_firstRequest.httpBody());
     613            FormDataIODevice* putDevice = new FormDataIODevice(request.httpBody());
    586614            // We may be uploading files so prevent QNR from buffering data
    587615            m_request.setHeader(QNetworkRequest::ContentLengthHeader, putDevice->getFormDataSize());
     
    605633void QNetworkReplyHandler::start()
    606634{
    607     QNetworkReply* reply = sendNetworkRequest();
     635    ResourceHandleInternal* d = m_resourceHandle->getInternal();
     636    if (!d || !d->m_context)
     637        return;
     638
     639    QNetworkReply* reply = sendNetworkRequest(d->m_context->networkAccessManager(), d->m_firstRequest);
    608640    if (!reply)
    609641        return;
    610642
    611     m_replyWrapper = new QNetworkReplyWrapper(&m_queue, reply);
     643    m_replyWrapper = new QNetworkReplyWrapper(&m_queue, reply, m_resourceHandle->shouldContentSniff() && d->m_context->mimeSniffingEnabled(), this);
    612644
    613645    if (m_loadType == SynchronousLoad && m_replyWrapper->reply()->isFinished()) {
  • trunk/Source/WebCore/platform/network/qt/QNetworkReplyHandler.h

    r84018 r84057  
    2626
    2727#include "FormData.h"
     28#include "QtMIMETypeSniffer.h"
    2829
    2930QT_BEGIN_NAMESPACE
     
    3536
    3637class ResourceHandle;
     38class ResourceRequest;
    3739class ResourceResponse;
    3840class QNetworkReplyHandler;
     
    6365    Q_OBJECT
    6466public:
    65     QNetworkReplyWrapper(QNetworkReplyHandlerCallQueue*, QNetworkReply*, QObject* parent = 0);
     67    QNetworkReplyWrapper(QNetworkReplyHandlerCallQueue*, QNetworkReply*, bool sniffMIMETypes, QObject* parent = 0);
    6668    ~QNetworkReplyWrapper();
    6769
     
    7375    QUrl redirectionTargetUrl() const { return m_redirectionTargetUrl; }
    7476    QString encoding() const { return m_encoding; }
    75     QString advertisedMimeType() const { return m_advertisedMimeType; }
     77    QString advertisedMIMEType() const { return m_advertisedMIMEType; }
     78    QString mimeType() const { return m_sniffedMIMEType.isEmpty() ? m_advertisedMIMEType : m_sniffedMIMEType; }
    7679
    7780    bool responseContainsData() const { return m_responseContainsData; }
     
    8285    void didReceiveFinished();
    8386    void didReceiveReadyRead();
     87    void receiveSniffedMIMEType();
    8488
    8589private:
    8690    void resetConnections();
     91    void emitMetaDataChanged();
    8792
    8893    QNetworkReply* m_reply;
     
    9095
    9196    QString m_encoding;
    92     QString m_advertisedMimeType;
    93 
    9497    QNetworkReplyHandlerCallQueue* m_queue;
    9598    bool m_responseContainsData;
     99
     100    QString m_advertisedMIMEType;
     101
     102    QString m_sniffedMIMEType;
     103    OwnPtr<QtMIMETypeSniffer> m_sniffer;
     104    bool m_sniffMIMETypes;
    96105};
    97106
     
    114123    QNetworkReply* release();
    115124
    116 public slots:
    117125    void finish();
     126    void forwardData();
    118127    void sendResponseIfNeeded();
    119     void forwardData();
     128
     129private slots:
    120130    void uploadProgress(qint64 bytesSent, qint64 bytesTotal);
    121131
     
    125135    void redirect(ResourceResponse&, const QUrl&);
    126136    bool wasAborted() const { return !m_resourceHandle; }
    127     QNetworkReply* sendNetworkRequest();
     137    QNetworkReply* sendNetworkRequest(QNetworkAccessManager*, const ResourceRequest&);
    128138
    129139    OwnPtr<QNetworkReplyWrapper> m_replyWrapper;
  • trunk/Source/WebCore/platform/network/qt/QtMIMETypeSniffer.h

    r84056 r84057  
    11/*
    2     Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
     2    Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
    33
    44    This library is free software; you can redistribute it and/or
     
    1818*/
    1919
    20 #ifndef WebFrameNetworkingContext_h
    21 #define WebFrameNetworkingContext_h
     20#ifndef QtMIMETypeSniffer_h
     21#define QtMIMETypeSniffer_h
    2222
    23 #include <WebCore/FrameNetworkingContext.h>
     23#include "MIMESniffing.h"
     24#include <QObject>
    2425
    25 namespace WebCore {
     26class QNetworkReply;
    2627
    27 class WebFrameNetworkingContext : public FrameNetworkingContext {
     28class QtMIMETypeSniffer : public QObject {
     29    Q_OBJECT
    2830public:
    29     static PassRefPtr<WebFrameNetworkingContext> create(Frame*);
     31    QtMIMETypeSniffer(QNetworkReply*, const QString& advertisedMimeType, bool isSupportedImageType);
     32    QString mimeType() const { return m_mimeType; }
     33    bool isFinished() const { return m_isFinished; }
     34
     35signals:
     36    void finished();
     37
     38private slots:
     39    void trySniffing();
    3040
    3141private:
    32     WebFrameNetworkingContext(Frame*);
     42    bool sniff();
    3343
    34     virtual QObject* originatingObject() const;
    35     virtual QNetworkAccessManager* networkAccessManager() const;
    36 
    37     QObject* m_originatingObject;
     44    QNetworkReply* m_reply;
     45    QString m_mimeType;
     46    MIMESniffer m_sniffer;
     47    bool m_isFinished;
    3848};
    3949
    40 }
    41 
    42 #endif // WebFrameNetworkingContext_h
     50#endif // QtMIMETypeSniffer_h
  • trunk/Source/WebKit/qt/ChangeLog

    r84010 r84057  
     12011-04-08  Luiz Agostini  <luiz.agostini@openbossa.org>
     2
     3        Reviewed by Kenneth Rohde Christiansen.
     4
     5        [Qt] QWebPage MIME type handling inconsistency with other web browsers
     6        https://bugs.webkit.org/show_bug.cgi?id=46968
     7
     8        Implementing mime type sniffing based on
     9        http://tools.ietf.org/html/draft-abarth-mime-sniff-06.
     10
     11        * WebCoreSupport/FrameLoaderClientQt.cpp:
     12        (WebCore::FrameLoaderClientQt::createNetworkingContext):
     13        * WebCoreSupport/FrameNetworkingContextQt.cpp:
     14        (WebCore::FrameNetworkingContextQt::FrameNetworkingContextQt):
     15        (WebCore::FrameNetworkingContextQt::create):
     16        (WebCore::FrameNetworkingContextQt::MIMESniffingEnabled):
     17        * WebCoreSupport/FrameNetworkingContextQt.h:
     18        * tests/MIMESniffing/MIMESniffing.pro: Added.
     19        * tests/MIMESniffing/TestData.h: Added.
     20        * tests/MIMESniffing/resources.qrc: Added.
     21        * tests/MIMESniffing/resources/application_atom+xml: Added.
     22        * tests/MIMESniffing/resources/application_ogg: Added.
     23        * tests/MIMESniffing/resources/application_pdf: Added.
     24        * tests/MIMESniffing/resources/application_postscript: Added.
     25        * tests/MIMESniffing/resources/application_rdf+xml: Added.
     26        * tests/MIMESniffing/resources/application_rss+xml: Added.
     27        * tests/MIMESniffing/resources/application_x-gzip: Added.
     28        * tests/MIMESniffing/resources/application_x-rar-compressed: Added.
     29        * tests/MIMESniffing/resources/application_zip: Added.
     30        * tests/MIMESniffing/resources/audio_x-wave: Added.
     31        * tests/MIMESniffing/resources/image_bmp: Added.
     32        * tests/MIMESniffing/resources/image_gif: Added.
     33        * tests/MIMESniffing/resources/image_jpeg: Added.
     34        * tests/MIMESniffing/resources/image_png: Added.
     35        * tests/MIMESniffing/resources/image_vnd.microsoft.icon: Added.
     36        * tests/MIMESniffing/resources/image_webp: Added.
     37        * tests/MIMESniffing/resources/text_html: Added.
     38        * tests/MIMESniffing/resources/text_xml: Added.
     39        * tests/MIMESniffing/resources/video_webm: Added.
     40        * tests/MIMESniffing/tst_MIMESniffing.cpp: Added.
     41        (tst_MIMESniffing::tst_MIMESniffing):
     42        (errorText):
     43        (tst_MIMESniffing::testCase1):
     44        * tests/tests.pro:
     45
    1462011-04-15  Andreas Kling  <kling@webkit.org>
    247
  • trunk/Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp

    r84010 r84057  
    16601660PassRefPtr<FrameNetworkingContext> FrameLoaderClientQt::createNetworkingContext()
    16611661{
    1662     return FrameNetworkingContextQt::create(m_frame, m_webFrame, m_webFrame->page()->networkAccessManager());
     1662    QVariant value = m_webFrame->page()->property("_q_MIMESniffingDisabled");
     1663    bool MIMESniffingDisabled = value.isValid() && value.toBool();
     1664
     1665    return FrameNetworkingContextQt::create(m_frame, m_webFrame, !MIMESniffingDisabled, m_webFrame->page()->networkAccessManager());
    16631666}
    16641667
  • trunk/Source/WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.cpp

    r66853 r84057  
    2929namespace WebCore {
    3030
    31 FrameNetworkingContextQt::FrameNetworkingContextQt(Frame* frame, QObject* originatingObject, QNetworkAccessManager* networkAccessManager)
     31FrameNetworkingContextQt::FrameNetworkingContextQt(Frame* frame, QObject* originatingObject, bool mimeSniffingEnabled, QNetworkAccessManager* networkAccessManager)
    3232    : FrameNetworkingContext(frame)
    3333    , m_originatingObject(originatingObject)
    3434    , m_networkAccessManager(networkAccessManager)
     35    , m_mimeSniffingEnabled(mimeSniffingEnabled)
    3536{
    3637}
    3738
    38 PassRefPtr<FrameNetworkingContextQt> FrameNetworkingContextQt::create(Frame* frame, QObject* originatingObject, QNetworkAccessManager* networkAccessManager)
     39PassRefPtr<FrameNetworkingContextQt> FrameNetworkingContextQt::create(Frame* frame, QObject* originatingObject, bool mimeSniffingEnabled, QNetworkAccessManager* networkAccessManager)
    3940{
    40     return adoptRef(new FrameNetworkingContextQt(frame, originatingObject, networkAccessManager));
     41    return adoptRef(new FrameNetworkingContextQt(frame, originatingObject, mimeSniffingEnabled, networkAccessManager));
    4142}
    4243
     
    5152}
    5253
     54bool FrameNetworkingContextQt::mimeSniffingEnabled() const
     55{
     56    return m_mimeSniffingEnabled;
    5357}
     58
     59}
  • trunk/Source/WebKit/qt/WebCoreSupport/FrameNetworkingContextQt.h

    r65579 r84057  
    2727class FrameNetworkingContextQt : public FrameNetworkingContext {
    2828public:
    29     static PassRefPtr<FrameNetworkingContextQt> create(Frame*, QObject* originatingObject, QNetworkAccessManager*);
     29    static PassRefPtr<FrameNetworkingContextQt> create(Frame*, QObject* originatingObject, bool mimeSniffingEnabled, QNetworkAccessManager*);
    3030
    3131private:
    32     FrameNetworkingContextQt(Frame*, QObject* originatingObject, QNetworkAccessManager*);
     32    FrameNetworkingContextQt(Frame*, QObject* originatingObject, bool mimeSniffingEnabled, QNetworkAccessManager*);
    3333
    3434    virtual QObject* originatingObject() const;
    3535    virtual QNetworkAccessManager* networkAccessManager() const;
     36    virtual bool mimeSniffingEnabled() const;
    3637
    3738    QObject* m_originatingObject;
    3839    QNetworkAccessManager* m_networkAccessManager;
     40    bool m_mimeSniffingEnabled;
    3941};
    4042
  • trunk/Source/WebKit/qt/tests/tests.pro

    r81886 r84057  
    11
    22TEMPLATE = subdirs
    3 SUBDIRS = qwebframe qwebpage qwebelement qgraphicswebview qwebhistoryinterface qwebview qwebhistory qwebinspector hybridPixmap
     3SUBDIRS = qwebframe qwebpage qwebelement qgraphicswebview qwebhistoryinterface qwebview qwebhistory qwebinspector hybridPixmap MIMESniffing
    44contains(QT_CONFIG, declarative): SUBDIRS += qdeclarativewebview
    55SUBDIRS += benchmarks/painting benchmarks/loading
  • trunk/Source/WebKit2/ChangeLog

    r84052 r84057  
     12011-04-08  Luiz Agostini  <luiz.agostini@openbossa.org>
     2
     3        Reviewed by Kenneth Rohde Christiansen.
     4
     5        [Qt] QWebPage MIME type handling inconsistency with other web browsers
     6        https://bugs.webkit.org/show_bug.cgi?id=46968
     7
     8        Implementing mime type sniffing based on
     9        http://tools.ietf.org/html/draft-abarth-mime-sniff-06.
     10
     11        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp:
     12        (WebCore::WebFrameNetworkingContext::WebFrameNetworkingContext):
     13        (WebCore::WebFrameNetworkingContext::MIMESniffingEnabled):
     14        * WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.h:
     15
    1162011-04-15  Oliver Hunt  <oliver@apple.com>
    217
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.cpp

    r76916 r84057  
    3030    : FrameNetworkingContext(frame)
    3131    , m_originatingObject(0)
     32    , m_mimeSniffingEnabled(true)
    3233{
    3334}
     
    4849}
    4950
     51bool WebFrameNetworkingContext::mimeSniffingEnabled() const
     52{
     53    return m_mimeSniffingEnabled;
    5054}
     55
     56}
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/qt/WebFrameNetworkingContext.h

    r73677 r84057  
    3434    virtual QObject* originatingObject() const;
    3535    virtual QNetworkAccessManager* networkAccessManager() const;
     36    virtual bool mimeSniffingEnabled() const;
    3637
    3738    QObject* m_originatingObject;
     39    bool m_mimeSniffingEnabled;
    3840};
    3941
Note: See TracChangeset for help on using the changeset viewer.