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