summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authormichaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-21 00:57:45 +0000
committermichaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-21 00:57:45 +0000
commitf7359a1a9592d2f6230e08b255f528707656373f (patch)
treebda87076ebc198dd8c66f363d788190f93f48b14 /net
parente7352bb3ea7b53e06c36cd856d2db4bc6bba5573 (diff)
downloadchromium_src-f7359a1a9592d2f6230e08b255f528707656373f.zip
chromium_src-f7359a1a9592d2f6230e08b255f528707656373f.tar.gz
chromium_src-f7359a1a9592d2f6230e08b255f528707656373f.tar.bz2
Add GetWellKnowMimeTypeFromExtension() to limit the search to a fixed set of well-known types without consulting the OS/registry.
BUG=86108 TESTS=none Review URL: http://codereview.chromium.org/7204036 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89773 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r--net/base/mime_util.cc41
-rw-r--r--net/base/mime_util.h7
2 files changed, 39 insertions, 9 deletions
diff --git a/net/base/mime_util.cc b/net/base/mime_util.cc
index 05c04ca..75572a9 100644
--- a/net/base/mime_util.cc
+++ b/net/base/mime_util.cc
@@ -28,6 +28,9 @@ class MimeUtil : public PlatformMimeUtil {
bool GetMimeTypeFromFile(const FilePath& file_path,
std::string* mime_type) const;
+ bool GetWellKnownMimeTypeFromExtension(const FilePath::StringType& ext,
+ std::string* mime_type) const;
+
bool IsSupportedImageMimeType(const char* mime_type) const;
bool IsSupportedMediaMimeType(const char* mime_type) const;
bool IsSupportedNonImageMimeType(const char* mime_type) const;
@@ -59,6 +62,10 @@ class MimeUtil : public PlatformMimeUtil {
// For faster lookup, keep hash sets.
void InitializeMimeTypeMaps();
+ bool GetMimeTypeFromExtensionHelper(
+ const FilePath::StringType& ext, bool include_platform_types,
+ std::string* mime_type) const;
+
typedef base::hash_set<std::string> MimeMappings;
MimeMappings image_map_;
MimeMappings media_map_;
@@ -146,6 +153,25 @@ static const char* FindMimeType(const MimeInfo* mappings,
bool MimeUtil::GetMimeTypeFromExtension(const FilePath::StringType& ext,
string* result) const {
+ return GetMimeTypeFromExtensionHelper(ext, true, result);
+}
+
+bool MimeUtil::GetWellKnownMimeTypeFromExtension(
+ const FilePath::StringType& ext, string* result) const {
+ return GetMimeTypeFromExtensionHelper(ext, false, result);
+}
+
+bool MimeUtil::GetMimeTypeFromFile(const FilePath& file_path,
+ string* result) const {
+ FilePath::StringType file_name_str = file_path.Extension();
+ if (file_name_str.empty())
+ return false;
+ return GetMimeTypeFromExtension(file_name_str.substr(1), result);
+}
+
+bool MimeUtil::GetMimeTypeFromExtensionHelper(
+ const FilePath::StringType& ext, bool include_platform_types,
+ string* result) const {
// Avoids crash when unable to handle a long file path. See crbug.com/48733.
const unsigned kMaxFilePathSize = 65536;
if (ext.length() > kMaxFilePathSize)
@@ -171,7 +197,7 @@ bool MimeUtil::GetMimeTypeFromExtension(const FilePath::StringType& ext,
return true;
}
- if (GetPlatformMimeTypeFromExtension(ext, result))
+ if (include_platform_types && GetPlatformMimeTypeFromExtension(ext, result))
return true;
mime_type = FindMimeType(secondary_mappings, arraysize(secondary_mappings),
@@ -184,14 +210,6 @@ bool MimeUtil::GetMimeTypeFromExtension(const FilePath::StringType& ext,
return false;
}
-bool MimeUtil::GetMimeTypeFromFile(const FilePath& file_path,
- string* result) const {
- FilePath::StringType file_name_str = file_path.Extension();
- if (file_name_str.empty())
- return false;
- return GetMimeTypeFromExtension(file_name_str.substr(1), result);
-}
-
// From WebKit's WebCore/platform/MIMETypeRegistry.cpp:
static const char* const supported_image_types[] = {
@@ -486,6 +504,11 @@ bool GetMimeTypeFromFile(const FilePath& file_path, std::string* mime_type) {
return g_mime_util.Get().GetMimeTypeFromFile(file_path, mime_type);
}
+bool GetWellKnownMimeTypeFromExtension(const FilePath::StringType& ext,
+ std::string* mime_type) {
+ return g_mime_util.Get().GetWellKnownMimeTypeFromExtension(ext, mime_type);
+}
+
bool GetPreferredExtensionForMimeType(const std::string& mime_type,
FilePath::StringType* extension) {
return g_mime_util.Get().GetPreferredExtensionForMimeType(mime_type,
diff --git a/net/base/mime_util.h b/net/base/mime_util.h
index d228b58..545abe0 100644
--- a/net/base/mime_util.h
+++ b/net/base/mime_util.h
@@ -19,6 +19,13 @@ namespace net {
NET_API bool GetMimeTypeFromExtension(const FilePath::StringType& ext,
std::string* mime_type);
+// Get the mime type (if any) that is associated with the given file extension.
+// Returns true if a corresponding mime type exists. In this method,
+// the search for a mime type is constrained to a limited set of
+// types known to the net library, the OS/registry is not consulted.
+NET_API bool GetWellKnownMimeTypeFromExtension(const FilePath::StringType& ext,
+ std::string* mime_type);
+
// Get the mime type (if any) that is associated with the given file. Returns
// true if a corresponding mime type exists.
NET_API bool GetMimeTypeFromFile(const FilePath& file_path,