Changeset 110361 in webkit


Ignore:
Timestamp:
Mar 9, 2012 6:55:55 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

BlackBerry PlayBook doesn't sniff mime types
https://bugs.webkit.org/show_bug.cgi?id=73869

Patch by Tyler Abbott <tabbott@rim.com> on 2012-03-09
Reviewed by Rob Buis.

Hook up MIMESniffing for BlackBerry. Override Content-Types will
not be overriden. File extensions will be trusted when content
is loaded from disk.

No tests, BlackBerry tests are not yet present in webkit.org codebase.

  • PlatformBlackBerry.cmake:
  • platform/network/blackberry/NetworkJob.cpp:

(WebCore::NetworkJob::NetworkJob):
(WebCore::NetworkJob::initialize):
(WebCore::NetworkJob::handleNotifyDataReceived):
(WebCore::NetworkJob::sendResponseIfNeeded):

  • platform/network/blackberry/NetworkJob.h:

(NetworkJob):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r110360 r110361  
     12012-03-09  Tyler Abbott  <tabbott@rim.com>
     2
     3        BlackBerry PlayBook doesn't sniff mime types
     4        https://bugs.webkit.org/show_bug.cgi?id=73869
     5
     6        Reviewed by Rob Buis.
     7
     8        Hook up MIMESniffing for BlackBerry. Override Content-Types will
     9        not be overriden. File extensions will be trusted when content
     10        is loaded from disk.
     11
     12        No tests, BlackBerry tests are not yet present in webkit.org codebase.
     13
     14        * PlatformBlackBerry.cmake:
     15        * platform/network/blackberry/NetworkJob.cpp:
     16        (WebCore::NetworkJob::NetworkJob):
     17        (WebCore::NetworkJob::initialize):
     18        (WebCore::NetworkJob::handleNotifyDataReceived):
     19        (WebCore::NetworkJob::sendResponseIfNeeded):
     20        * platform/network/blackberry/NetworkJob.h:
     21        (NetworkJob):
     22
    1232012-03-09  Enrica Casucci  <enrica@apple.com>
    224
  • trunk/Source/WebCore/PlatformBlackBerry.cmake

    r110334 r110361  
    8888# Networking sources
    8989LIST(APPEND WebCore_SOURCES
     90    platform/network/MIMESniffing.cpp
    9091    platform/network/ProxyServer.cpp
    9192    platform/network/blackberry/DeferredData.cpp
  • trunk/Source/WebCore/platform/network/blackberry/NetworkJob.cpp

    r110176 r110361  
    2828#include "HTTPParsers.h"
    2929#include "KURL.h"
     30#include "MIMESniffing.h"
    3031#include "MIMETypeRegistry.h"
    3132#include "NetworkManager.h"
     
    108109    , m_isXHR(false)
    109110    , m_needsRetryAsFTPDirectory(false)
     111    , m_isOverrideContentType(false)
    110112    , m_extendedStatusCode(0)
    111113    , m_redirectCount(0)
     
    152154    // We don't need to explicitly call notifyHeaderReceived, as the Content-Type
    153155    // will ultimately get parsed when sendResponseIfNeeded gets called.
    154     if (!request.getOverrideContentType().empty())
     156    if (!request.getOverrideContentType().empty()) {
    155157        m_contentType = String(request.getOverrideContentType().c_str());
     158        m_isOverrideContentType = true;
     159    }
    156160
    157161    // No need to create the streams for data and about.
     
    383387        return;
    384388
     389    // The loadFile API sets the override content type,
     390    // this will always be used as the content type and should not be overridden.
     391    if (!m_dataReceived && !m_isOverrideContentType) {
     392        bool shouldSniff = true;
     393
     394        // Don't bother sniffing the content type of a file that
     395        // is on a file system if it has a MIME mappable file extension.
     396        // The file extension is likely to be correct.
     397        if (m_isFile) {
     398            String urlFilename = m_response.url().lastPathComponent();
     399            size_t pos = urlFilename.reverseFind('.');
     400            if (pos != WTF::notFound) {
     401                String extension = urlFilename.substring(pos + 1);
     402                String mimeType = MIMETypeRegistry::getMIMETypeForExtension(extension);
     403                if (!mimeType.isEmpty())
     404                    shouldSniff = false;
     405            }
     406        }
     407
     408        if (shouldSniff) {
     409            MIMESniffer sniffer = MIMESniffer(m_contentType.latin1().data(), MIMETypeRegistry::isSupportedImageResourceMIMEType(m_contentType));
     410            if (const char* type = sniffer.sniff(buf, std::min(len, sniffer.dataSize())))
     411                m_sniffedMimeType = String(type);
     412        }
     413    }
     414
    385415    m_dataReceived = true;
    386416
     
    584614    // if there's no custom sniffer header, try to set it from the Content-Type header
    585615    // if this fails, guess it from extension.
    586     String mimeType;
     616    String mimeType = m_sniffedMimeType;
    587617    if (m_isFTP && m_isFTPDir)
    588618        mimeType = "application/x-ftp-directory";
    589     else
    590         mimeType = m_response.httpHeaderField(BlackBerry::Platform::NetworkRequest::HEADER_RIM_SNIFFED_MIME_TYPE);
    591619    if (mimeType.isNull())
    592620        mimeType = extractMIMETypeFromMediaType(m_contentType);
  • trunk/Source/WebCore/platform/network/blackberry/NetworkJob.h

    r106931 r110361  
    159159    Timer<NetworkJob> m_deleteJobTimer;
    160160    String m_contentType;
     161    String m_sniffedMimeType;
    161162    String m_contentDisposition;
    162163    BlackBerry::Platform::NetworkStreamFactory* m_streamFactory;
     
    176177    bool m_isXHR; // FIXME - After 7.0, remove this. Only the Qt port reports HTTP error statuses as didFails, so we probably shouldn't.
    177178    bool m_needsRetryAsFTPDirectory;
     179    bool m_isOverrideContentType;
    178180
    179181    // If an HTTP status code is received, m_extendedStatusCode and m_response.httpStatusCode will both be set to it.
Note: See TracChangeset for help on using the changeset viewer.