MIMETypeRegistryQt.cpp [plain text]
#include "config.h"
#include "MIMETypeRegistry.h"
#include <QMimeDatabase>
#include <wtf/Assertions.h>
#include <wtf/MainThread.h>
namespace WebCore {
struct ExtensionMap {
const char* extension;
const char* dotExtension;
const char* mimeType;
};
static const ExtensionMap extensionMap[] = {
{ "htm", ".htm", "text/html" },
{ "html", ".html", "text/html" },
{ "js", ".js", "application/javascript" },
{ "mht", ".mht", "application/x-mimearchive" }, { "mhtml", ".mhtml", "application/x-mimearchive" }, { "svg", ".svg", "image/svg+xml" },
{ "text", ".text", "text/plain" }, { "txt", ".txt", "text/plain"},
{ "wmlc", ".wmlc", "application/vnd.wap.wmlc" }, { "xht", ".xht", "application/xhtml+xml" },
{ "xhtml", ".xhtml", "application/xhtml+xml" },
{ "xsl", ".xsl", "text/xsl" },
{ 0, 0, 0 }
};
String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
{
String suffix = ext.lower();
const ExtensionMap *e = extensionMap;
while (e->extension) {
if (suffix == e->extension)
return e->mimeType;
++e;
}
const QString filename = QStringLiteral("filename.") + QString(suffix);
QMimeType mimeType = QMimeDatabase().mimeTypeForFile(filename, QMimeDatabase::MatchExtension);
if (mimeType.isValid() && !mimeType.isDefault()) {
if (mimeType.inherits(QStringLiteral("application/x-executable")))
return String();
return mimeType.name();
}
return String();
}
String MIMETypeRegistry::getMIMETypeForPath(const String& path)
{
const ExtensionMap *e = extensionMap;
while (e->extension) {
if (path.endsWith(e->dotExtension, false))
return e->mimeType;
++e;
}
QMimeType type = QMimeDatabase().mimeTypeForFile(path, QMimeDatabase::MatchExtension);
if (type.isValid() && !type.isDefault())
return type.name();
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)
{
QMimeType mimeType = QMimeDatabase().mimeTypeForName(mimeTypeName);
if (mimeType.isValid() && !mimeType.isDefault())
return mimeType.name();
return mimeTypeName;
}
bool MIMETypeRegistry::isApplicationPluginMIMEType(const String& mimeType)
{
return mimeType.startsWith("application/x-qt-plugin", false)
|| mimeType.startsWith("application/x-qt-styled-widget", false);
}
}