OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 | 6 |
7 #include "net/base/mime_util.h" | 7 #include "net/base/mime_util.h" |
8 #include "net/base/platform_mime_util.h" | 8 #include "net/base/platform_mime_util.h" |
9 | 9 |
10 #include "base/hash_tables.h" | 10 #include "base/hash_tables.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 bool IsSupportedNonImageMimeType(const char* mime_type) const; | 30 bool IsSupportedNonImageMimeType(const char* mime_type) const; |
31 bool IsSupportedJavascriptMimeType(const char* mime_type) const; | 31 bool IsSupportedJavascriptMimeType(const char* mime_type) const; |
32 | 32 |
33 bool IsViewSourceMimeType(const char* mime_type) const; | 33 bool IsViewSourceMimeType(const char* mime_type) const; |
34 | 34 |
35 bool IsSupportedMimeType(const std::string& mime_type) const; | 35 bool IsSupportedMimeType(const std::string& mime_type) const; |
36 | 36 |
37 bool MatchesMimeType(const std::string &mime_type_pattern, | 37 bool MatchesMimeType(const std::string &mime_type_pattern, |
38 const std::string &mime_type) const; | 38 const std::string &mime_type) const; |
39 | 39 |
| 40 bool AreSupportedMediaCodecs(const std::vector<std::string>& codecs) const; |
| 41 |
40 void ParseCodecString(const std::string& codecs, | 42 void ParseCodecString(const std::string& codecs, |
41 std::vector<std::string>* codecs_out); | 43 std::vector<std::string>* codecs_out); |
42 | 44 |
43 private: | 45 private: |
44 friend struct DefaultSingletonTraits<MimeUtil>; | 46 friend struct DefaultSingletonTraits<MimeUtil>; |
45 MimeUtil() { | 47 MimeUtil() { |
46 InitializeMimeTypeMaps(); | 48 InitializeMimeTypeMaps(); |
47 } | 49 } |
48 | 50 |
49 // For faster lookup, keep hash sets. | 51 // For faster lookup, keep hash sets. |
50 void InitializeMimeTypeMaps(); | 52 void InitializeMimeTypeMaps(); |
51 | 53 |
52 typedef base::hash_set<std::string> MimeMappings; | 54 typedef base::hash_set<std::string> MimeMappings; |
53 MimeMappings image_map_; | 55 MimeMappings image_map_; |
54 MimeMappings media_map_; | 56 MimeMappings media_map_; |
55 MimeMappings non_image_map_; | 57 MimeMappings non_image_map_; |
56 MimeMappings javascript_map_; | 58 MimeMappings javascript_map_; |
57 MimeMappings view_source_map_; | 59 MimeMappings view_source_map_; |
| 60 MimeMappings codecs_map_; |
58 }; // class MimeUtil | 61 }; // class MimeUtil |
59 | 62 |
60 struct MimeInfo { | 63 struct MimeInfo { |
61 const char* mime_type; | 64 const char* mime_type; |
62 const char* extensions; // comma separated list | 65 const char* extensions; // comma separated list |
63 }; | 66 }; |
64 | 67 |
65 static const MimeInfo primary_mappings[] = { | 68 static const MimeInfo primary_mappings[] = { |
66 { "text/html", "html,htm" }, | 69 { "text/html", "html,htm" }, |
67 { "text/css", "css" }, | 70 { "text/css", "css" }, |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 // MP3. | 199 // MP3. |
197 "audio/mp3", | 200 "audio/mp3", |
198 "audio/x-mp3", | 201 "audio/x-mp3", |
199 | 202 |
200 // Generic MPEG mime-types. | 203 // Generic MPEG mime-types. |
201 // TODO(fbarchard): Remove these when layout tests stop using mpg. | 204 // TODO(fbarchard): Remove these when layout tests stop using mpg. |
202 "audio/mpeg", | 205 "audio/mpeg", |
203 "video/mpeg" | 206 "video/mpeg" |
204 }; | 207 }; |
205 | 208 |
| 209 // List of supported codecs when passed in with <source type="...">. |
| 210 // |
| 211 // Refer to http://wiki.whatwg.org/wiki/Video_type_parameters#Browser_Support |
| 212 // for more information. |
| 213 static const char* const supported_media_codecs[] = { |
| 214 #if defined(GOOGLE_CHROME_BUILD) |
| 215 "avc1", |
| 216 "mp4a", |
| 217 #endif |
| 218 "theora", |
| 219 "vorbis", |
| 220 }; |
| 221 |
206 // Note: does not include javascript types list (see supported_javascript_types) | 222 // Note: does not include javascript types list (see supported_javascript_types) |
207 static const char* const supported_non_image_types[] = { | 223 static const char* const supported_non_image_types[] = { |
208 "text/html", | 224 "text/html", |
209 "text/xml", | 225 "text/xml", |
210 "text/xsl", | 226 "text/xsl", |
211 "text/plain", | 227 "text/plain", |
212 // Many users complained about css files served for | 228 // Many users complained about css files served for |
213 // download instead of displaying in the browser: | 229 // download instead of displaying in the browser: |
214 // http://code.google.com/p/chromium/issues/detail?id=7192 | 230 // http://code.google.com/p/chromium/issues/detail?id=7192 |
215 // So, by including "text/css" into this list we choose Firefox | 231 // So, by including "text/css" into this list we choose Firefox |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 | 286 |
271 // Initialize the supported media types. | 287 // Initialize the supported media types. |
272 for (size_t i = 0; i < arraysize(supported_media_types); ++i) | 288 for (size_t i = 0; i < arraysize(supported_media_types); ++i) |
273 media_map_.insert(supported_media_types[i]); | 289 media_map_.insert(supported_media_types[i]); |
274 | 290 |
275 for (size_t i = 0; i < arraysize(supported_javascript_types); ++i) | 291 for (size_t i = 0; i < arraysize(supported_javascript_types); ++i) |
276 javascript_map_.insert(supported_javascript_types[i]); | 292 javascript_map_.insert(supported_javascript_types[i]); |
277 | 293 |
278 for (size_t i = 0; i < arraysize(view_source_types); ++i) | 294 for (size_t i = 0; i < arraysize(view_source_types); ++i) |
279 view_source_map_.insert(view_source_types[i]); | 295 view_source_map_.insert(view_source_types[i]); |
| 296 |
| 297 for (size_t i = 0; i < arraysize(supported_media_codecs); ++i) |
| 298 codecs_map_.insert(supported_media_codecs[i]); |
280 } | 299 } |
281 | 300 |
282 bool MimeUtil::IsSupportedImageMimeType(const char* mime_type) const { | 301 bool MimeUtil::IsSupportedImageMimeType(const char* mime_type) const { |
283 return image_map_.find(mime_type) != image_map_.end(); | 302 return image_map_.find(mime_type) != image_map_.end(); |
284 } | 303 } |
285 | 304 |
286 bool MimeUtil::IsSupportedMediaMimeType(const char* mime_type) const { | 305 bool MimeUtil::IsSupportedMediaMimeType(const char* mime_type) const { |
287 return media_map_.find(mime_type) != media_map_.end(); | 306 return media_map_.find(mime_type) != media_map_.end(); |
288 } | 307 } |
289 | 308 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 if (mime_type.find(left) != 0) | 355 if (mime_type.find(left) != 0) |
337 return false; | 356 return false; |
338 | 357 |
339 if (!right.empty() && | 358 if (!right.empty() && |
340 mime_type.rfind(right) != mime_type.length() - right.length()) | 359 mime_type.rfind(right) != mime_type.length() - right.length()) |
341 return false; | 360 return false; |
342 | 361 |
343 return true; | 362 return true; |
344 } | 363 } |
345 | 364 |
| 365 bool MimeUtil::AreSupportedMediaCodecs( |
| 366 const std::vector<std::string>& codecs) const { |
| 367 for (size_t i = 0; i < codecs.size(); ++i) { |
| 368 if (codecs_map_.find(codecs[i]) == codecs_map_.end()) { |
| 369 return false; |
| 370 } |
| 371 } |
| 372 return true; |
| 373 } |
| 374 |
346 void MimeUtil::ParseCodecString(const std::string& codecs, | 375 void MimeUtil::ParseCodecString(const std::string& codecs, |
347 std::vector<std::string>* codecs_out) { | 376 std::vector<std::string>* codecs_out) { |
348 std::string no_quote_codecs; | 377 std::string no_quote_codecs; |
349 TrimString(codecs, "\"", &no_quote_codecs); | 378 TrimString(codecs, "\"", &no_quote_codecs); |
350 SplitString(no_quote_codecs, ',', codecs_out); | 379 SplitString(no_quote_codecs, ',', codecs_out); |
351 | 380 |
352 // Truncate each string at the '.' | 381 // Truncate each string at the '.' |
353 for (std::vector<std::string>::iterator it = codecs_out->begin(); | 382 for (std::vector<std::string>::iterator it = codecs_out->begin(); |
354 it != codecs_out->end(); | 383 it != codecs_out->end(); |
355 ++it) { | 384 ++it) { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 | 432 |
404 bool IsSupportedMimeType(const std::string& mime_type) { | 433 bool IsSupportedMimeType(const std::string& mime_type) { |
405 return GetMimeUtil()->IsSupportedMimeType(mime_type); | 434 return GetMimeUtil()->IsSupportedMimeType(mime_type); |
406 } | 435 } |
407 | 436 |
408 bool MatchesMimeType(const std::string &mime_type_pattern, | 437 bool MatchesMimeType(const std::string &mime_type_pattern, |
409 const std::string &mime_type) { | 438 const std::string &mime_type) { |
410 return GetMimeUtil()->MatchesMimeType(mime_type_pattern, mime_type); | 439 return GetMimeUtil()->MatchesMimeType(mime_type_pattern, mime_type); |
411 } | 440 } |
412 | 441 |
| 442 bool AreSupportedMediaCodecs(const std::vector<std::string>& codecs) { |
| 443 return GetMimeUtil()->AreSupportedMediaCodecs(codecs); |
| 444 } |
| 445 |
413 void ParseCodecString(const std::string& codecs, | 446 void ParseCodecString(const std::string& codecs, |
414 std::vector<std::string>* codecs_out) { | 447 std::vector<std::string>* codecs_out) { |
415 GetMimeUtil()->ParseCodecString(codecs, codecs_out); | 448 GetMimeUtil()->ParseCodecString(codecs, codecs_out); |
416 } | 449 } |
417 | 450 |
418 } // namespace net | 451 } // namespace net |
OLD | NEW |