Title: [110361] trunk/Source/WebCore
- Revision
- 110361
- Author
- [email protected]
- Date
- 2012-03-09 18:55:55 -0800 (Fri, 09 Mar 2012)
Log Message
BlackBerry PlayBook doesn't sniff mime types
https://bugs.webkit.org/show_bug.cgi?id=73869
Patch by Tyler Abbott <[email protected]> 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):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (110360 => 110361)
--- trunk/Source/WebCore/ChangeLog 2012-03-10 02:53:43 UTC (rev 110360)
+++ trunk/Source/WebCore/ChangeLog 2012-03-10 02:55:55 UTC (rev 110361)
@@ -1,3 +1,25 @@
+2012-03-09 Tyler Abbott <[email protected]>
+
+ BlackBerry PlayBook doesn't sniff mime types
+ https://bugs.webkit.org/show_bug.cgi?id=73869
+
+ 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):
+
2012-03-09 Enrica Casucci <[email protected]>
Move WebNSURLExtras code down to WebCore.
Modified: trunk/Source/WebCore/PlatformBlackBerry.cmake (110360 => 110361)
--- trunk/Source/WebCore/PlatformBlackBerry.cmake 2012-03-10 02:53:43 UTC (rev 110360)
+++ trunk/Source/WebCore/PlatformBlackBerry.cmake 2012-03-10 02:55:55 UTC (rev 110361)
@@ -87,6 +87,7 @@
# Networking sources
LIST(APPEND WebCore_SOURCES
+ platform/network/MIMESniffing.cpp
platform/network/ProxyServer.cpp
platform/network/blackberry/DeferredData.cpp
platform/network/blackberry/NetworkJob.cpp
Modified: trunk/Source/WebCore/platform/network/blackberry/NetworkJob.cpp (110360 => 110361)
--- trunk/Source/WebCore/platform/network/blackberry/NetworkJob.cpp 2012-03-10 02:53:43 UTC (rev 110360)
+++ trunk/Source/WebCore/platform/network/blackberry/NetworkJob.cpp 2012-03-10 02:55:55 UTC (rev 110361)
@@ -27,6 +27,7 @@
#include "FrameLoaderClientBlackBerry.h"
#include "HTTPParsers.h"
#include "KURL.h"
+#include "MIMESniffing.h"
#include "MIMETypeRegistry.h"
#include "NetworkManager.h"
#include "ResourceHandleClient.h"
@@ -107,6 +108,7 @@
, m_callingClient(false)
, m_isXHR(false)
, m_needsRetryAsFTPDirectory(false)
+ , m_isOverrideContentType(false)
, m_extendedStatusCode(0)
, m_redirectCount(0)
, m_deferredData(*this)
@@ -151,8 +153,10 @@
// We don't need to explicitly call notifyHeaderReceived, as the Content-Type
// will ultimately get parsed when sendResponseIfNeeded gets called.
- if (!request.getOverrideContentType().empty())
+ if (!request.getOverrideContentType().empty()) {
m_contentType = String(request.getOverrideContentType().c_str());
+ m_isOverrideContentType = true;
+ }
// No need to create the streams for data and about.
if (m_isData || m_isAbout)
@@ -382,6 +386,32 @@
if (!buf || !len)
return;
+ // The loadFile API sets the override content type,
+ // this will always be used as the content type and should not be overridden.
+ if (!m_dataReceived && !m_isOverrideContentType) {
+ bool shouldSniff = true;
+
+ // Don't bother sniffing the content type of a file that
+ // is on a file system if it has a MIME mappable file extension.
+ // The file extension is likely to be correct.
+ if (m_isFile) {
+ String urlFilename = m_response.url().lastPathComponent();
+ size_t pos = urlFilename.reverseFind('.');
+ if (pos != WTF::notFound) {
+ String extension = urlFilename.substring(pos + 1);
+ String mimeType = MIMETypeRegistry::getMIMETypeForExtension(extension);
+ if (!mimeType.isEmpty())
+ shouldSniff = false;
+ }
+ }
+
+ if (shouldSniff) {
+ MIMESniffer sniffer = MIMESniffer(m_contentType.latin1().data(), MIMETypeRegistry::isSupportedImageResourceMIMEType(m_contentType));
+ if (const char* type = sniffer.sniff(buf, std::min(len, sniffer.dataSize())))
+ m_sniffedMimeType = String(type);
+ }
+ }
+
m_dataReceived = true;
// Protect against reentrancy.
@@ -583,11 +613,9 @@
// Get the MIME type that was set by the content sniffer
// if there's no custom sniffer header, try to set it from the Content-Type header
// if this fails, guess it from extension.
- String mimeType;
+ String mimeType = m_sniffedMimeType;
if (m_isFTP && m_isFTPDir)
mimeType = "application/x-ftp-directory";
- else
- mimeType = m_response.httpHeaderField(BlackBerry::Platform::NetworkRequest::HEADER_RIM_SNIFFED_MIME_TYPE);
if (mimeType.isNull())
mimeType = extractMIMETypeFromMediaType(m_contentType);
if (mimeType.isNull())
Modified: trunk/Source/WebCore/platform/network/blackberry/NetworkJob.h (110360 => 110361)
--- trunk/Source/WebCore/platform/network/blackberry/NetworkJob.h 2012-03-10 02:53:43 UTC (rev 110360)
+++ trunk/Source/WebCore/platform/network/blackberry/NetworkJob.h 2012-03-10 02:55:55 UTC (rev 110361)
@@ -158,6 +158,7 @@
OwnPtr<ResourceResponse> m_multipartResponse;
Timer<NetworkJob> m_deleteJobTimer;
String m_contentType;
+ String m_sniffedMimeType;
String m_contentDisposition;
BlackBerry::Platform::NetworkStreamFactory* m_streamFactory;
bool m_isFile;
@@ -175,6 +176,7 @@
bool m_callingClient;
bool m_isXHR; // FIXME - After 7.0, remove this. Only the Qt port reports HTTP error statuses as didFails, so we probably shouldn't.
bool m_needsRetryAsFTPDirectory;
+ bool m_isOverrideContentType;
// If an HTTP status code is received, m_extendedStatusCode and m_response.httpStatusCode will both be set to it.
// If a platform error code is received, m_extendedStatusCode will be set to it and m_response.httpStatusCode will be set to 404.
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes