Title: [135511] trunk/Source/WebCore
Revision
135511
Author
[email protected]
Date
2012-11-22 05:50:21 -0800 (Thu, 22 Nov 2012)

Log Message

[Qt] Correct extensions on preferredFilename
https://bugs.webkit.org/show_bug.cgi?id=103054

Reviewed by Simon Hausmann.

When guessing a filename we will now ensure it has an extension that is valid for its mimetype.
To do this the two missing methods getExtensionsForMIMEType and getPreferredExtensionForMIMEType
have been added to the Qt implementation of MIMETypeRegistry.

* platform/network/qt/QNetworkReplyHandler.cpp:
(WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
* platform/qt/MIMETypeRegistryQt.cpp:
(WebCore::MIMETypeRegistry::getExtensionsForMIMEType):
(WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (135510 => 135511)


--- trunk/Source/WebCore/ChangeLog	2012-11-22 13:45:59 UTC (rev 135510)
+++ trunk/Source/WebCore/ChangeLog	2012-11-22 13:50:21 UTC (rev 135511)
@@ -1,3 +1,20 @@
+2012-11-22  Allan Sandfeld Jensen  <[email protected]>
+
+        [Qt] Correct extensions on preferredFilename
+        https://bugs.webkit.org/show_bug.cgi?id=103054
+
+        Reviewed by Simon Hausmann.
+
+        When guessing a filename we will now ensure it has an extension that is valid for its mimetype.
+        To do this the two missing methods getExtensionsForMIMEType and getPreferredExtensionForMIMEType
+        have been added to the Qt implementation of MIMETypeRegistry.
+
+        * platform/network/qt/QNetworkReplyHandler.cpp:
+        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
+        * platform/qt/MIMETypeRegistryQt.cpp:
+        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType):
+        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
+
 2012-11-22  Kent Tamura  <[email protected]>
 
         INPUT_MULTIPLE_FIELDS_UI: Refactoring: Do not call updateInnerTextValue if only read-only sub-fields have values

Modified: trunk/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp (135510 => 135511)


--- trunk/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp	2012-11-22 13:45:59 UTC (rev 135510)
+++ trunk/Source/WebCore/platform/network/qt/QNetworkReplyHandler.cpp	2012-11-22 13:50:21 UTC (rev 135511)
@@ -32,6 +32,7 @@
 #include <QDateTime>
 #include <QFile>
 #include <QFileInfo>
+#include <QMimeDatabase>
 #include <QNetworkCookie>
 #include <QNetworkReply>
 
@@ -581,8 +582,21 @@
 
         if (!suggestedFilename.isEmpty())
             response.setSuggestedFilename(suggestedFilename);
-        else
-            response.setSuggestedFilename(url.lastPathComponent());
+        else {
+            Vector<String> extensions = MIMETypeRegistry::getExtensionsForMIMEType(mimeType);
+            if (extensions.isEmpty())
+                response.setSuggestedFilename(url.lastPathComponent());
+            else {
+                // If the suffix doesn't match the MIME type, correct the suffix.
+                QString filename = url.lastPathComponent();
+                const String suffix = QMimeDatabase().suffixForFileName(filename);
+                if (!extensions.contains(suffix)) {
+                    filename.chop(suffix.length());
+                    filename += MIMETypeRegistry::getPreferredExtensionForMIMEType(mimeType);
+                }
+                response.setSuggestedFilename(filename);
+            }
+        }
 
         response.setHTTPStatusCode(statusCode);
         response.setHTTPStatusText(m_replyWrapper->reply()->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toByteArray().constData());

Modified: trunk/Source/WebCore/platform/qt/MIMETypeRegistryQt.cpp (135510 => 135511)


--- trunk/Source/WebCore/platform/qt/MIMETypeRegistryQt.cpp	2012-11-22 13:45:59 UTC (rev 135510)
+++ trunk/Source/WebCore/platform/qt/MIMETypeRegistryQt.cpp	2012-11-22 13:50:21 UTC (rev 135511)
@@ -56,6 +56,28 @@
     return defaultMIMEType();
 }
 
+Vector<String> MIMETypeRegistry::getExtensionsForMIMEType(const String& mimeTypeName)
+{
+    Vector<String> extensions;
+    QMimeType mimeType = QMimeDatabase().mimeTypeForName(mimeTypeName);
+    if (mimeType.isValid() && !mimeType.isDefault()) {
+        Q_FOREACH(const QString& suffix, mimeType.suffixes()) {
+            extensions.append(suffix);
+        }
+    }
+
+    return extensions;
+}
+
+String MIMETypeRegistry::getPreferredExtensionForMIMEType(const String& mimeTypeName)
+{
+    QMimeType mimeType = QMimeDatabase().mimeTypeForName(mimeTypeName);
+    if (mimeType.isValid() && !mimeType.isDefault())
+        return mimeType.preferredSuffix();
+
+    return String();
+}
+
 String MIMETypeRegistry::getNormalizedMIMEType(const String& mimeTypeName)
 {
     // This looks up the mime type object by preferred name or alias, and returns the preferred name.
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to