diff options
author | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-21 00:57:45 +0000 |
---|---|---|
committer | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-21 00:57:45 +0000 |
commit | f7359a1a9592d2f6230e08b255f528707656373f (patch) | |
tree | bda87076ebc198dd8c66f363d788190f93f48b14 /net | |
parent | e7352bb3ea7b53e06c36cd856d2db4bc6bba5573 (diff) | |
download | chromium_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.cc | 41 | ||||
-rw-r--r-- | net/base/mime_util.h | 7 |
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, |