18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
25f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2006, 2008, 2009 Apple Inc.  All rights reserved.
35f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MIMETypeRegistry.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MediaPlayer.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/HashMap.h>
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/HashSet.h>
335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <wtf/StdLibExtras.h>
34f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/StringHash.h>
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CG)
37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "ImageSourceCG.h"
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <ApplicationServices/ApplicationServices.h>
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RetainPtr.h>
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(QT)
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qimagereader.h>
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <qimagewriter.h>
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(WEB_ARCHIVE)
472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "ArchiveFactory.h"
482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic HashSet<String>* supportedImageResourceMIMETypes;
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic HashSet<String>* supportedImageMIMETypes;
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic HashSet<String>* supportedImageMIMETypesForEncoding;
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic HashSet<String>* supportedJavaScriptMIMETypes;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic HashSet<String>* supportedNonImageMIMETypes;
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic HashSet<String>* supportedMediaMIMETypes;
582bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic HashSet<String>* unsupportedTextMIMETypes;
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsentypedef HashMap<String, Vector<String>*, CaseFoldingHash> MediaMIMETypeMap;
6106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void initializeSupportedImageMIMETypes()
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CG)
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RetainPtr<CFArrayRef> supportedTypes(AdoptCF, CGImageSourceCopyTypeIdentifiers());
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFIndex count = CFArrayGetCount(supportedTypes.get());
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (CFIndex i = 0; i < count; i++) {
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        RetainPtr<CFStringRef> supportedType(AdoptCF, reinterpret_cast<CFStringRef>(CFArrayGetValueAtIndex(supportedTypes.get(), i)));
69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        String mimeType = MIMETypeForImageSourceType(supportedType.get());
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (!mimeType.isEmpty()) {
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            supportedImageMIMETypes->add(mimeType);
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            supportedImageResourceMIMETypes->add(mimeType);
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // On Tiger and Leopard, com.microsoft.bmp doesn't have a MIME type in the registry.
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypes->add("image/bmp");
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageResourceMIMETypes->add("image/bmp");
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Favicons don't have a MIME type in the registry either.
815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    supportedImageMIMETypes->add("image/vnd.microsoft.icon");
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypes->add("image/x-icon");
835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    supportedImageResourceMIMETypes->add("image/vnd.microsoft.icon");
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageResourceMIMETypes->add("image/x-icon");
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //  We only get one MIME type per UTI, hence our need to add these manually
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypes->add("image/pjpeg");
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageResourceMIMETypes->add("image/pjpeg");
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //  We don't want to try to treat all binary data as an image
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypes->remove("application/octet-stream");
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageResourceMIMETypes->remove("application/octet-stream");
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //  Don't treat pdf/postscript as images directly
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypes->remove("application/pdf");
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypes->remove("application/postscript");
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#elif PLATFORM(QT)
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QList<QByteArray> formats = QImageReader::supportedImageFormats();
100231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    for (size_t i = 0; i < static_cast<size_t>(formats.size()); ++i) {
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /*
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         * Qt has support for SVG, but we want to use KSVG2
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         */
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (formats.at(i).toLower().startsWith("svg"))
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            continue;
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String mimeType = MIMETypeRegistry::getMIMETypeForExtension(formats.at(i).constData());
10968513a70bcd92384395513322f1b801e7bf9c729Steve Block        if (!mimeType.isEmpty()) {
11068513a70bcd92384395513322f1b801e7bf9c729Steve Block            supportedImageMIMETypes->add(mimeType);
11168513a70bcd92384395513322f1b801e7bf9c729Steve Block            supportedImageResourceMIMETypes->add(mimeType);
11268513a70bcd92384395513322f1b801e7bf9c729Steve Block        }
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#elif PLATFORM(ANDROID)
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static const char* types[] = {
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/jpeg",
117083a1da09417e76081f7def3d083b9af2c606822Shimeng (Simon) Wang        "image/webp",
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/png",
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/gif",
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/bmp",
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/x-icon",    // ico
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/ico",
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/x-xbitmap"  // xbm
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (size_t i = 0; i < sizeof(types) / sizeof(types[0]); ++i) {
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        supportedImageMIMETypes->add(types[i]);
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        supportedImageResourceMIMETypes->add(types[i]);
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Checked Safari impl, it seems that the HTTP stack returns
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // multiple responses, the initial response, and then one for
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // multipart segment. Each response is sent to the same ResourceLoader
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // so for us to support this we would need to do the same.
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedNonImageMIMETypes->remove("multipart/x-mixed-replace");
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !ENABLE(XSLT)
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedNonImageMIMETypes->remove("text/xsl");
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // assume that all implementations at least support the following standard
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // image types:
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static const char* types[] = {
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/jpeg",
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/png",
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/gif",
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/bmp",
1455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        "image/vnd.microsoft.icon",    // ico
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/x-icon",    // ico
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/x-xbitmap"  // xbm
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
1494576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    for (size_t i = 0; i < WTF_ARRAY_LENGTH(types); ++i) {
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        supportedImageMIMETypes->add(types[i]);
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        supportedImageResourceMIMETypes->add(types[i]);
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void initializeSupportedImageMIMETypesForEncoding()
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypesForEncoding = new HashSet<String>;
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CG)
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RetainPtr<CFArrayRef> supportedTypes(AdoptCF, CGImageDestinationCopyTypeIdentifiers());
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFIndex count = CFArrayGetCount(supportedTypes.get());
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (CFIndex i = 0; i < count; i++) {
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        RetainPtr<CFStringRef> supportedType(AdoptCF, reinterpret_cast<CFStringRef>(CFArrayGetValueAtIndex(supportedTypes.get(), i)));
166635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        String mimeType = MIMETypeForImageSourceType(supportedType.get());
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (!mimeType.isEmpty())
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            supportedImageMIMETypesForEncoding->add(mimeType);
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // FIXME: Add Windows support for all the supported UTI's when a way to convert from MIMEType to UTI reliably is found.
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // For now, only support PNG, JPEG and GIF.  See <rdar://problem/6095286>.
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypesForEncoding->add("image/png");
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypesForEncoding->add("image/jpeg");
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypesForEncoding->add("image/gif");
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#elif PLATFORM(QT)
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    QList<QByteArray> formats = QImageWriter::supportedImageFormats();
179231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    for (int i = 0; i < formats.size(); ++i) {
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String mimeType = MIMETypeRegistry::getMIMETypeForExtension(formats.at(i).constData());
18168513a70bcd92384395513322f1b801e7bf9c729Steve Block        if (!mimeType.isEmpty())
18268513a70bcd92384395513322f1b801e7bf9c729Steve Block            supportedImageMIMETypesForEncoding->add(mimeType);
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
184db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#elif PLATFORM(GTK)
185db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    supportedImageMIMETypesForEncoding->add("image/png");
186db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    supportedImageMIMETypesForEncoding->add("image/jpeg");
187db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    supportedImageMIMETypesForEncoding->add("image/tiff");
188db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    supportedImageMIMETypesForEncoding->add("image/bmp");
189db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    supportedImageMIMETypesForEncoding->add("image/ico");
1902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#elif USE(CAIRO)
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypesForEncoding->add("image/png");
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void initializeSupportedJavaScriptMIMETypes()
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /*
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        Mozilla 1.8 and WinIE 7 both accept text/javascript and text/ecmascript.
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        Mozilla 1.8 accepts application/javascript, application/ecmascript, and application/x-javascript, but WinIE 7 doesn't.
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        WinIE 7 accepts text/javascript1.1 - text/javascript1.3, text/jscript, and text/livescript, but Mozilla 1.8 doesn't.
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        Mozilla 1.8 allows leading and trailing whitespace, but WinIE 7 doesn't.
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        Mozilla 1.8 and WinIE 7 both accept the empty string, but neither accept a whitespace-only string.
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        We want to accept all the values that either of these browsers accept, but not other values.
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static const char* types[] = {
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/javascript",
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/ecmascript",
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "application/javascript",
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "application/ecmascript",
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "application/x-javascript",
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/javascript1.1",
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/javascript1.2",
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/javascript1.3",
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/jscript",
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/livescript",
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
2174576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    for (size_t i = 0; i < WTF_ARRAY_LENGTH(types); ++i)
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      supportedJavaScriptMIMETypes->add(types[i]);
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void initializeSupportedNonImageMimeTypes()
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static const char* types[] = {
224635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WML)
225635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        "text/vnd.wap.wml",
226635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        "application/vnd.wap.wmlc",
227635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/html",
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/xml",
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/xsl",
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/plain",
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "text/",
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "application/xml",
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "application/xhtml+xml",
2355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        "application/vnd.wap.xhtml+xml",
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "application/rss+xml",
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "application/atom+xml",
238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        "application/json",
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "image/svg+xml",
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(FTPDIR)
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "application/x-ftp-directory",
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        "multipart/x-mixed-replace"
246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        // Note: ADDING a new type here will probably render it as HTML. This can
247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        // result in cross-site scripting.
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
249dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    COMPILE_ASSERT(sizeof(types) / sizeof(types[0]) <= 16,
250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block                   nonimage_mime_types_must_be_less_than_or_equal_to_16);
251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
2524576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang    for (size_t i = 0; i < WTF_ARRAY_LENGTH(types); ++i)
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        supportedNonImageMIMETypes->add(types[i]);
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(WEB_ARCHIVE)
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ArchiveFactory::registerKnownArchiveMIMETypes();
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
26006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenstatic MediaMIMETypeMap& mediaMIMETypeMap()
2615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
2625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    struct TypeExtensionPair {
2635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        const char* type;
2645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        const char* extension;
2655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    };
2665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
2675f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    // A table of common media MIME types and file extenstions used when a platform's
26806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    // specific MIME type lookup doesn't have a match for a media file extension.
2695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    static const TypeExtensionPair pairs[] = {
2705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
2715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // Ogg
2725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "application/ogg", "ogx" },
273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        { "audio/ogg", "ogg" },
2745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/ogg", "oga" },
2755f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/ogg", "ogv" },
2765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
2775f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // Annodex
2785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "application/annodex", "anx" },
2795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/annodex", "axa" },
2805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/annodex", "axv" },
2815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/speex", "spx" },
2825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
2835ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        // WebM
2845ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        { "video/webm", "webm" },
2855ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        { "audio/webm", "webm" },
2865ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
2875f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // MPEG
2885f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/mpeg", "m1a" },
2895f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/mpeg", "m2a" },
2905f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/mpeg", "m1s" },
2915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/mpeg", "mpa" },
2925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg", "mpg" },
2935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg", "m15" },
2945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg", "m1s" },
2955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg", "m1v" },
2965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg", "m75" },
2975f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg", "mpa" },
2985f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg", "mpeg" },
2995f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg", "mpm" },
3005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg", "mpv" },
3015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
3025f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // MPEG playlist
30306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        { "application/vnd.apple.mpegurl", "m3u8" },
30406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        { "application/mpegurl", "m3u8" },
3055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "application/x-mpegurl", "m3u8" },
30606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        { "audio/mpegurl", "m3url" },
30706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        { "audio/x-mpegurl", "m3url" },
30806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        { "audio/mpegurl", "m3u" },
30906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        { "audio/x-mpegurl", "m3u" },
3105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
3115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // MPEG-4
3125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/x-m4v", "m4v" },
3135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/x-m4a", "m4a" },
3145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/x-m4b", "m4b" },
3155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/x-m4p", "m4p" },
316967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch        { "audio/mp4", "m4a" },
3175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
3185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // MP3
3195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/mp3", "mp3" },
32006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        { "audio/x-mp3", "mp3" },
32106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        { "audio/x-mpeg", "mp3" },
3225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
3235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // MPEG-2
3245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/x-mpeg2", "mp2" },
3255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg2", "vob" },
3265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/mpeg2", "mod" },
3275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/m2ts", "m2ts" },
3285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/x-m2ts", "m2t" },
3295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "video/x-m2ts", "ts" },
3305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
3315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // 3GP/3GP2
3325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/3gpp", "3gpp" },
3335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/3gpp2", "3g2" },
3345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "application/x-mpeg", "amc" },
3355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
3365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // AAC
3375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/aac", "aac" },
3385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/aac", "adts" },
3395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/x-aac", "m4r" },
3405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
3415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // CoreAudio File
3425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        { "audio/x-caf", "caf" },
343e14391e94c850b8bd03680c23b38978db68687a8John Reck        { "audio/x-gsm", "gsm" },
344e14391e94c850b8bd03680c23b38978db68687a8John Reck
345e14391e94c850b8bd03680c23b38978db68687a8John Reck        // ADPCM
346e14391e94c850b8bd03680c23b38978db68687a8John Reck        { "audio/x-wav", "wav" }
3475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    };
3485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
34906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    DEFINE_STATIC_LOCAL(MediaMIMETypeMap, mediaMIMETypeForExtensionMap, ());
35006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
35106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    if (!mediaMIMETypeForExtensionMap.isEmpty())
35206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        return mediaMIMETypeForExtensionMap;
35306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
3545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    const unsigned numPairs = sizeof(pairs) / sizeof(pairs[0]);
35506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    for (unsigned ndx = 0; ndx < numPairs; ++ndx) {
35606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
35706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        if (mediaMIMETypeForExtensionMap.contains(pairs[ndx].extension))
35806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            mediaMIMETypeForExtensionMap.get(pairs[ndx].extension)->append(pairs[ndx].type);
35906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        else {
36006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            Vector<String>* synonyms = new Vector<String>;
36106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
36206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            // If there is a system specific type for this extension, add it as the first type so
36306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            // getMediaMIMETypeForExtension will always return it.
364e14391e94c850b8bd03680c23b38978db68687a8John Reck            String systemType = MIMETypeRegistry::getMIMETypeForExtension(pairs[ndx].extension);
36506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            if (!systemType.isEmpty() && pairs[ndx].type != systemType)
36606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen                synonyms->append(systemType);
36706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            synonyms->append(pairs[ndx].type);
36806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen            mediaMIMETypeForExtensionMap.add(pairs[ndx].extension, synonyms);
36906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen        }
37006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    }
37106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
37206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    return mediaMIMETypeForExtensionMap;
3735f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
3745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
3752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(FILE_SYSTEM) && ENABLE(WORKERS)
3762fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockString MIMETypeRegistry::getMIMETypeForExtension(const String& extension)
3772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
3782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    return getMIMETypeForExtensionThreadSafe(extension);
3792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
3802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
3812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
3825f1ab04193ad0130ca8204aadaceae083aca9881Feng QianString MIMETypeRegistry::getMediaMIMETypeForExtension(const String& ext)
3835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
3846b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    // Look in the system-specific registry first.
3856b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    String type = getMIMETypeForExtension(ext);
3866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    if (!type.isEmpty())
3876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        return type;
3886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
3896b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    Vector<String>* typeList = mediaMIMETypeMap().get(ext);
3906b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    if (typeList)
3916b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        return (*typeList)[0];
39206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
39306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    return String();
39406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}
39506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
39606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian MonsenVector<String> MIMETypeRegistry::getMediaMIMETypesForExtension(const String& ext)
39706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{
3986b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    Vector<String>* typeList = mediaMIMETypeMap().get(ext);
3996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    if (typeList)
4006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        return *typeList;
4016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
4026b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    // Only need to look in the system-specific registry if mediaMIMETypeMap() doesn't contain
4036b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    // the extension at all, because it always contains the system-specific type if the
4046b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    // extension is in the static mapping table.
4056b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    String type = getMIMETypeForExtension(ext);
4066b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    if (!type.isEmpty()) {
4076b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        Vector<String> typeList;
4086b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        typeList.append(type);
4096b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner        return typeList;
4106b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner    }
4116b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner
41206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    return Vector<String>();
4135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
4145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void initializeSupportedMediaMIMETypes()
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedMediaMIMETypes = new HashSet<String>;
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(VIDEO)
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    MediaPlayer::getSupportedTypes(*supportedMediaMIMETypes);
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4232bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic void initializeUnsupportedTextMIMETypes()
4242bde8e466a4451c7319e3a072d118917957d6554Steve Block{
4252bde8e466a4451c7319e3a072d118917957d6554Steve Block    static const char* types[] = {
4262bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/calendar",
4272bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/x-calendar",
4282bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/x-vcalendar",
4292bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/vcalendar",
4302bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/vcard",
4312bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/x-vcard",
4322bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/directory",
4332bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/ldif",
4342bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/qif",
4352bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/x-qif",
4362bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/x-csv",
4372bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/x-vcf",
4382bde8e466a4451c7319e3a072d118917957d6554Steve Block        "text/rtf",
4392bde8e466a4451c7319e3a072d118917957d6554Steve Block    };
4402bde8e466a4451c7319e3a072d118917957d6554Steve Block    for (size_t i = 0; i < WTF_ARRAY_LENGTH(types); ++i)
4412bde8e466a4451c7319e3a072d118917957d6554Steve Block      unsupportedTextMIMETypes->add(types[i]);
4422bde8e466a4451c7319e3a072d118917957d6554Steve Block}
4432bde8e466a4451c7319e3a072d118917957d6554Steve Block
4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void initializeMIMETypeRegistry()
4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedJavaScriptMIMETypes = new HashSet<String>;
4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    initializeSupportedJavaScriptMIMETypes();
4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedNonImageMIMETypes = new HashSet<String>(*supportedJavaScriptMIMETypes);
4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    initializeSupportedNonImageMimeTypes();
4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageResourceMIMETypes = new HashSet<String>;
4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    supportedImageMIMETypes = new HashSet<String>;
4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    initializeSupportedImageMIMETypes();
4552bde8e466a4451c7319e3a072d118917957d6554Steve Block
4562bde8e466a4451c7319e3a072d118917957d6554Steve Block    unsupportedTextMIMETypes = new HashSet<String>;
4572bde8e466a4451c7319e3a072d118917957d6554Steve Block    initializeUnsupportedTextMIMETypes();
4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString MIMETypeRegistry::getMIMETypeForPath(const String& path)
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
462f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    size_t pos = path.reverseFind('.');
463f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    if (pos != notFound) {
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String extension = path.substring(pos + 1);
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        String result = getMIMETypeForExtension(extension);
4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (result.length())
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return result;
4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return "application/octet-stream";
4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool MIMETypeRegistry::isSupportedImageMIMEType(const String& mimeType)
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (mimeType.isEmpty())
4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedImageMIMETypes)
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeMIMETypeRegistry();
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return supportedImageMIMETypes->contains(mimeType);
4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool MIMETypeRegistry::isSupportedImageResourceMIMEType(const String& mimeType)
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (mimeType.isEmpty())
4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedImageResourceMIMETypes)
4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeMIMETypeRegistry();
4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return supportedImageResourceMIMETypes->contains(mimeType);
4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(const String& mimeType)
4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
492dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    ASSERT(isMainThread());
493dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (mimeType.isEmpty())
4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedImageMIMETypesForEncoding)
4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeSupportedImageMIMETypesForEncoding();
4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return supportedImageMIMETypesForEncoding->contains(mimeType);
4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool MIMETypeRegistry::isSupportedJavaScriptMIMEType(const String& mimeType)
5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (mimeType.isEmpty())
5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedJavaScriptMIMETypes)
5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeMIMETypeRegistry();
5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return supportedJavaScriptMIMETypes->contains(mimeType);
5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool MIMETypeRegistry::isSupportedNonImageMIMEType(const String& mimeType)
5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (mimeType.isEmpty())
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedNonImageMIMETypes)
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeMIMETypeRegistry();
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return supportedNonImageMIMETypes->contains(mimeType);
5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool MIMETypeRegistry::isSupportedMediaMIMEType(const String& mimeType)
5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (mimeType.isEmpty())
5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedMediaMIMETypes)
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeSupportedMediaMIMETypes();
5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return supportedMediaMIMETypes->contains(mimeType);
5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5282bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool MIMETypeRegistry::isUnsupportedTextMIMEType(const String& mimeType)
5292bde8e466a4451c7319e3a072d118917957d6554Steve Block{
5302bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (mimeType.isEmpty())
5312bde8e466a4451c7319e3a072d118917957d6554Steve Block        return false;
5322bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!unsupportedTextMIMETypes)
5332bde8e466a4451c7319e3a072d118917957d6554Steve Block        initializeMIMETypeRegistry();
5342bde8e466a4451c7319e3a072d118917957d6554Steve Block    return unsupportedTextMIMETypes->contains(mimeType);
5352bde8e466a4451c7319e3a072d118917957d6554Steve Block}
5362bde8e466a4451c7319e3a072d118917957d6554Steve Block
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool MIMETypeRegistry::isJavaAppletMIMEType(const String& mimeType)
5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Since this set is very limited and is likely to remain so we won't bother with the overhead
5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // of using a hash set.
5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Any of the MIME types below may be followed by any number of specific versions of the JVM,
5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // which is why we use startsWith()
5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return mimeType.startsWith("application/x-java-applet", false)
5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        || mimeType.startsWith("application/x-java-bean", false)
5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        || mimeType.startsWith("application/x-java-vm", false);
5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHashSet<String>& MIMETypeRegistry::getSupportedImageMIMETypes()
5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedImageMIMETypes)
5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeMIMETypeRegistry();
5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return *supportedImageMIMETypes;
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHashSet<String>& MIMETypeRegistry::getSupportedImageResourceMIMETypes()
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedImageResourceMIMETypes)
5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeMIMETypeRegistry();
5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return *supportedImageResourceMIMETypes;
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHashSet<String>& MIMETypeRegistry::getSupportedImageMIMETypesForEncoding()
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedImageMIMETypesForEncoding)
5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeSupportedImageMIMETypesForEncoding();
5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return *supportedImageMIMETypesForEncoding;
5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHashSet<String>& MIMETypeRegistry::getSupportedNonImageMIMETypes()
5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedNonImageMIMETypes)
5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeMIMETypeRegistry();
5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return *supportedNonImageMIMETypes;
5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHashSet<String>& MIMETypeRegistry::getSupportedMediaMIMETypes()
5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!supportedMediaMIMETypes)
5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        initializeSupportedMediaMIMETypes();
5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return *supportedMediaMIMETypes;
5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5832bde8e466a4451c7319e3a072d118917957d6554Steve BlockHashSet<String>& MIMETypeRegistry::getUnsupportedTextMIMETypes()
5842bde8e466a4451c7319e3a072d118917957d6554Steve Block{
5852bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!unsupportedTextMIMETypes)
5862bde8e466a4451c7319e3a072d118917957d6554Steve Block        initializeMIMETypeRegistry();
5872bde8e466a4451c7319e3a072d118917957d6554Steve Block    return *unsupportedTextMIMETypes;
5882bde8e466a4451c7319e3a072d118917957d6554Steve Block}
5892bde8e466a4451c7319e3a072d118917957d6554Steve Block
5905f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianconst String& defaultMIMEType()
5915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
5925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    DEFINE_STATIC_LOCAL(const String, defaultMIMEType, ("application/octet-stream"));
5935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    return defaultMIMEType;
5945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
5955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
597