Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1062)

Unified Diff: net/base/mime_util.cc

Issue 10448109: Move function for classifying a string as a mime type into MimeUtil (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/base/mime_util.cc
diff --git a/net/base/mime_util.cc b/net/base/mime_util.cc
index 8ff58e6d579b674bddb20da134a4aaf7f7e0e8bf..d97983b5348809f4afd980b9a6bd58df22a34eb8 100644
--- a/net/base/mime_util.cc
+++ b/net/base/mime_util.cc
@@ -43,6 +43,8 @@ class MimeUtil : public PlatformMimeUtil {
bool MatchesMimeType(const std::string &mime_type_pattern,
const std::string &mime_type) const;
+ bool IsStringMimeType(const std::string& type_string) const;
+
bool AreSupportedMediaCodecs(const std::vector<std::string>& codecs) const;
void ParseCodecString(const std::string& codecs,
@@ -486,6 +488,40 @@ bool MimeUtil::MatchesMimeType(const std::string& mime_type_pattern,
return true;
}
+bool MimeUtil::IsStringMimeType(const std::string& type_string) const {
rvargas (doing something else) 2012/06/01 01:51:14 Shouldn't this build upon IsSupportedMimeType inst
Greg Billock 2012/06/01 04:58:22 How so? I think this function would basically have
rvargas (doing something else) 2012/06/01 19:11:25 You're right, the "supported" part makes all the d
+ // MIME types are always ASCII and case-insensitive (at least, the top-level
+ // and secondary types we care about).
+ if (!IsStringASCII(type_string))
+ return false;
+ std::string raw_type = type_string;
+ StringToLowerASCII(&raw_type);
rvargas (doing something else) 2012/06/01 19:11:25 either this is not needed, or the comparisons shou
Greg Billock 2012/06/05 01:08:56 Done.
+
+ // See http://www.iana.org/assignments/media-types/index.html
+ if (StartsWithASCII(raw_type, "application/", false) ||
rvargas (doing something else) 2012/06/01 19:11:25 Then let's follow the pattern of this class and ma
Greg Billock 2012/06/05 01:08:56 Done.
+ StartsWithASCII(raw_type, "audio/", false) ||
+ StartsWithASCII(raw_type, "example/", false) ||
+ StartsWithASCII(raw_type, "image/", false) ||
+ StartsWithASCII(raw_type, "message/", false) ||
+ StartsWithASCII(raw_type, "model/", false) ||
+ StartsWithASCII(raw_type, "multipart/", false) ||
+ StartsWithASCII(raw_type, "text/", false) ||
+ StartsWithASCII(raw_type, "video/", false) ||
+ raw_type == "*/*" || raw_type == "*") {
+ return true;
+ }
+
+ // If there's a "/" separator character, and the token before it is
rvargas (doing something else) 2012/06/01 01:51:14 If we have no code to cover this case maybe we can
+ // "x-" + (ascii characters), it is also a MIME type.
+ size_t slash = raw_type.find('/');
+ if (slash < 3 || slash == std::string::npos || slash == raw_type.length() - 1)
+ return false;
+
+ if (StartsWithASCII(raw_type, "x-", false))
+ return true;
+
+ return false;
+}
+
bool MimeUtil::AreSupportedMediaCodecs(
const std::vector<std::string>& codecs) const {
return AreSupportedCodecs(codecs_map_, codecs);
@@ -578,6 +614,10 @@ bool MatchesMimeType(const std::string& mime_type_pattern,
return g_mime_util.Get().MatchesMimeType(mime_type_pattern, mime_type);
}
+bool IsStringMimeType(const std::string& type_string) {
+ return g_mime_util.Get().IsStringMimeType(type_string);
+}
+
bool AreSupportedMediaCodecs(const std::vector<std::string>& codecs) {
return g_mime_util.Get().AreSupportedMediaCodecs(codecs);
}

Powered by Google App Engine
This is Rietveld 408576698