OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 5 #include <algorithm> |
6 #include <iterator> | 6 #include <iterator> |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 | 75 |
76 void ParseCodecString(const std::string& codecs, | 76 void ParseCodecString(const std::string& codecs, |
77 std::vector<std::string>* codecs_out, | 77 std::vector<std::string>* codecs_out, |
78 bool strip); | 78 bool strip); |
79 | 79 |
80 bool IsStrictMediaMimeType(const std::string& mime_type) const; | 80 bool IsStrictMediaMimeType(const std::string& mime_type) const; |
81 bool IsSupportedStrictMediaMimeType( | 81 bool IsSupportedStrictMediaMimeType( |
82 const std::string& mime_type, | 82 const std::string& mime_type, |
83 const std::vector<std::string>& codecs) const; | 83 const std::vector<std::string>& codecs) const; |
84 | 84 |
| 85 bool MimeTypeDoesNotNeedCodecs(const std::string& mime_type) const; |
| 86 |
85 void RemoveProprietaryMediaTypesAndCodecsForTests(); | 87 void RemoveProprietaryMediaTypesAndCodecsForTests(); |
86 | 88 |
87 private: | 89 private: |
88 friend struct base::DefaultLazyInstanceTraits<MimeUtil>; | 90 friend struct base::DefaultLazyInstanceTraits<MimeUtil>; |
89 | 91 |
90 typedef base::hash_set<std::string> MimeMappings; | 92 typedef base::hash_set<std::string> MimeMappings; |
91 typedef std::map<std::string, MimeMappings> StrictMappings; | 93 typedef std::map<std::string, MimeMappings> StrictMappings; |
92 | 94 |
93 MimeUtil(); | 95 MimeUtil(); |
94 | 96 |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 const char* codecs_list; | 433 const char* codecs_list; |
432 }; | 434 }; |
433 | 435 |
434 static const MediaFormatStrict format_codec_mappings[] = { | 436 static const MediaFormatStrict format_codec_mappings[] = { |
435 { "video/webm", "opus,vorbis,vp8,vp8.0,vp9,vp9.0" }, | 437 { "video/webm", "opus,vorbis,vp8,vp8.0,vp9,vp9.0" }, |
436 { "audio/webm", "opus,vorbis" }, | 438 { "audio/webm", "opus,vorbis" }, |
437 { "audio/wav", "1" }, | 439 { "audio/wav", "1" }, |
438 { "audio/x-wav", "1" }, | 440 { "audio/x-wav", "1" }, |
439 { "video/ogg", "opus,theora,vorbis" }, | 441 { "video/ogg", "opus,theora,vorbis" }, |
440 { "audio/ogg", "opus,vorbis" }, | 442 { "audio/ogg", "opus,vorbis" }, |
441 { "application/ogg", "opus,theora,vorbis" } | 443 { "application/ogg", "opus,theora,vorbis" }, |
| 444 { "audio/mpeg", "" }, |
| 445 { "audio/mp3", "" }, |
| 446 { "audio/x-mp3", "" } |
442 }; | 447 }; |
443 | 448 |
444 MimeUtil::MimeUtil() { | 449 MimeUtil::MimeUtil() { |
445 InitializeMimeTypeMaps(); | 450 InitializeMimeTypeMaps(); |
446 } | 451 } |
447 | 452 |
448 // static | 453 // static |
449 bool MimeUtil::AreSupportedCodecs(const MimeMappings& supported_codecs, | 454 bool MimeUtil::AreSupportedCodecs(const MimeMappings& supported_codecs, |
450 const std::vector<std::string>& codecs) { | 455 const std::vector<std::string>& codecs) { |
451 for (size_t i = 0; i < codecs.size(); ++i) { | 456 for (size_t i = 0; i < codecs.size(); ++i) { |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 } | 708 } |
704 | 709 |
705 bool MimeUtil::IsSupportedStrictMediaMimeType( | 710 bool MimeUtil::IsSupportedStrictMediaMimeType( |
706 const std::string& mime_type, | 711 const std::string& mime_type, |
707 const std::vector<std::string>& codecs) const { | 712 const std::vector<std::string>& codecs) const { |
708 StrictMappings::const_iterator it = strict_format_map_.find(mime_type); | 713 StrictMappings::const_iterator it = strict_format_map_.find(mime_type); |
709 return (it != strict_format_map_.end()) && | 714 return (it != strict_format_map_.end()) && |
710 AreSupportedCodecs(it->second, codecs); | 715 AreSupportedCodecs(it->second, codecs); |
711 } | 716 } |
712 | 717 |
| 718 bool MimeUtil::MimeTypeDoesNotNeedCodecs(const std::string& mime_type) const { |
| 719 StrictMappings::const_iterator it = strict_format_map_.find(mime_type); |
| 720 return (it != strict_format_map_.end()) && it->second.empty(); |
| 721 } |
| 722 |
713 void MimeUtil::RemoveProprietaryMediaTypesAndCodecsForTests() { | 723 void MimeUtil::RemoveProprietaryMediaTypesAndCodecsForTests() { |
714 for (size_t i = 0; i < arraysize(proprietary_media_types); ++i) { | 724 for (size_t i = 0; i < arraysize(proprietary_media_types); ++i) { |
715 non_image_map_.erase(proprietary_media_types[i]); | 725 non_image_map_.erase(proprietary_media_types[i]); |
716 media_map_.erase(proprietary_media_types[i]); | 726 media_map_.erase(proprietary_media_types[i]); |
717 } | 727 } |
718 for (size_t i = 0; i < arraysize(proprietary_media_codecs); ++i) | 728 for (size_t i = 0; i < arraysize(proprietary_media_codecs); ++i) |
719 codecs_map_.erase(proprietary_media_codecs[i]); | 729 codecs_map_.erase(proprietary_media_codecs[i]); |
720 } | 730 } |
721 | 731 |
722 //---------------------------------------------------------------------------- | 732 //---------------------------------------------------------------------------- |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 | 793 |
784 bool IsStrictMediaMimeType(const std::string& mime_type) { | 794 bool IsStrictMediaMimeType(const std::string& mime_type) { |
785 return g_mime_util.Get().IsStrictMediaMimeType(mime_type); | 795 return g_mime_util.Get().IsStrictMediaMimeType(mime_type); |
786 } | 796 } |
787 | 797 |
788 bool IsSupportedStrictMediaMimeType(const std::string& mime_type, | 798 bool IsSupportedStrictMediaMimeType(const std::string& mime_type, |
789 const std::vector<std::string>& codecs) { | 799 const std::vector<std::string>& codecs) { |
790 return g_mime_util.Get().IsSupportedStrictMediaMimeType(mime_type, codecs); | 800 return g_mime_util.Get().IsSupportedStrictMediaMimeType(mime_type, codecs); |
791 } | 801 } |
792 | 802 |
| 803 bool MimeTypeDoesNotNeedCodecs(const std::string& mime_type) { |
| 804 return g_mime_util.Get().MimeTypeDoesNotNeedCodecs(mime_type); |
| 805 } |
| 806 |
793 void ParseCodecString(const std::string& codecs, | 807 void ParseCodecString(const std::string& codecs, |
794 std::vector<std::string>* codecs_out, | 808 std::vector<std::string>* codecs_out, |
795 const bool strip) { | 809 const bool strip) { |
796 g_mime_util.Get().ParseCodecString(codecs, codecs_out, strip); | 810 g_mime_util.Get().ParseCodecString(codecs, codecs_out, strip); |
797 } | 811 } |
798 | 812 |
799 namespace { | 813 namespace { |
800 | 814 |
801 // From http://www.w3schools.com/media/media_mimeref.asp and | 815 // From http://www.w3schools.com/media/media_mimeref.asp and |
802 // http://plugindoc.mozdev.org/winmime.php | 816 // http://plugindoc.mozdev.org/winmime.php |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1028 post_data->append("\r\n" + value + "\r\n"); | 1042 post_data->append("\r\n" + value + "\r\n"); |
1029 } | 1043 } |
1030 | 1044 |
1031 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary, | 1045 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary, |
1032 std::string* post_data) { | 1046 std::string* post_data) { |
1033 DCHECK(post_data); | 1047 DCHECK(post_data); |
1034 post_data->append("--" + mime_boundary + "--\r\n"); | 1048 post_data->append("--" + mime_boundary + "--\r\n"); |
1035 } | 1049 } |
1036 | 1050 |
1037 } // namespace net | 1051 } // namespace net |
OLD | NEW |