Chromium Code Reviews| 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" |
| 11 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/stl_util.h" | 13 #include "base/stl_util.h" |
| 14 #include "base/strings/string_split.h" | 14 #include "base/strings/string_split.h" |
| 15 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
| 16 #include "base/strings/utf_string_conversions.h" | 16 #include "base/strings/utf_string_conversions.h" |
| 17 #include "net/base/mime_util.h" | 17 #include "net/base/mime_util.h" |
| 18 #include "net/base/platform_mime_util.h" | 18 #include "net/base/platform_mime_util.h" |
| 19 | 19 |
| 20 #if defined(OS_ANDROID) | |
| 21 #include "base/android/build_info.h" | |
| 22 #endif | |
| 23 | |
| 20 using std::string; | 24 using std::string; |
| 21 | 25 |
| 22 namespace { | 26 namespace { |
| 23 | 27 |
| 24 struct MediaType { | 28 struct MediaType { |
| 25 const char name[12]; | 29 const char name[12]; |
| 26 const char matcher[13]; | 30 const char matcher[13]; |
| 27 }; | 31 }; |
| 28 | 32 |
| 29 static const MediaType kIanaMediaTypes[] = { | 33 static const MediaType kIanaMediaTypes[] = { |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 297 // This set of codecs is supported by all variations of Chromium. | 301 // This set of codecs is supported by all variations of Chromium. |
| 298 // | 302 // |
| 299 // Refer to http://wiki.whatwg.org/wiki/Video_type_parameters#Browser_Support | 303 // Refer to http://wiki.whatwg.org/wiki/Video_type_parameters#Browser_Support |
| 300 // for more information. | 304 // for more information. |
| 301 // | 305 // |
| 302 // The codecs for WAV are integers as defined in Appendix A of RFC2361: | 306 // The codecs for WAV are integers as defined in Appendix A of RFC2361: |
| 303 // http://tools.ietf.org/html/rfc2361 | 307 // http://tools.ietf.org/html/rfc2361 |
| 304 static const char* const common_media_codecs[] = { | 308 static const char* const common_media_codecs[] = { |
| 305 #if !defined(OS_ANDROID) // Android doesn't support Ogg Theora. | 309 #if !defined(OS_ANDROID) // Android doesn't support Ogg Theora. |
| 306 "theora", | 310 "theora", |
| 307 "vp9", // TODO(tomfinegan): Move vp9 back down with vp8 once VP9 is supported | |
| 308 // on Android. https://crbug.com/285016 | |
| 309 #endif | 311 #endif |
| 310 "vorbis", | 312 "vorbis", |
| 311 "vp8", | 313 "vp8", |
| 314 "vp9", | |
| 312 "1" // WAVE_FORMAT_PCM. | 315 "1" // WAVE_FORMAT_PCM. |
| 313 }; | 316 }; |
| 314 | 317 |
| 315 // List of proprietary codecs only supported by Google Chrome. | 318 // List of proprietary codecs only supported by Google Chrome. |
| 316 static const char* const proprietary_media_codecs[] = { | 319 static const char* const proprietary_media_codecs[] = { |
| 317 "avc1", | 320 "avc1", |
| 318 "avc3", | 321 "avc3", |
| 319 "mp4a" | 322 "mp4a" |
| 320 }; | 323 }; |
| 321 | 324 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 402 "application/javascript", | 405 "application/javascript", |
| 403 "application/ecmascript", | 406 "application/ecmascript", |
| 404 "application/x-javascript", | 407 "application/x-javascript", |
| 405 "text/javascript1.1", | 408 "text/javascript1.1", |
| 406 "text/javascript1.2", | 409 "text/javascript1.2", |
| 407 "text/javascript1.3", | 410 "text/javascript1.3", |
| 408 "text/jscript", | 411 "text/jscript", |
| 409 "text/livescript" | 412 "text/livescript" |
| 410 }; | 413 }; |
| 411 | 414 |
| 415 #if defined(OS_ANDROID) | |
| 416 static bool IsCodecSupportedOnAndroid(std::string codec) { | |
|
scherkus (not reviewing)
2013/11/11 21:33:46
const-ref
vignesh
2013/11/12 00:02:48
Done.
| |
| 417 // VP9 is supported only in KitKat+ (API Level 19). | |
| 418 if ((!codec.compare("vp9") || !codec.compare("vp9.0")) && | |
| 419 base::android::BuildInfo::GetInstance()->sdk_int() < 19) | |
| 420 return false; | |
|
qinmin
2013/11/11 21:52:50
you need {} as the if statement contains multiple
vignesh
2013/11/12 00:02:48
Done.
| |
| 421 return true; | |
| 422 } | |
| 423 #endif | |
| 424 | |
| 412 struct MediaFormatStrict { | 425 struct MediaFormatStrict { |
| 413 const char* mime_type; | 426 const char* mime_type; |
| 414 const char* codecs_list; | 427 const char* codecs_list; |
| 415 }; | 428 }; |
| 416 | 429 |
| 417 static const MediaFormatStrict format_codec_mappings[] = { | 430 static const MediaFormatStrict format_codec_mappings[] = { |
| 418 // TODO(tomfinegan): Remove this if/else when VP9 is supported on Android. | |
| 419 // https://crbug.com/285016 | |
| 420 #if !defined(OS_ANDROID) | |
| 421 { "video/webm", "vorbis,vp8,vp8.0,vp9,vp9.0" }, | 431 { "video/webm", "vorbis,vp8,vp8.0,vp9,vp9.0" }, |
| 422 #else | |
| 423 { "video/webm", "vorbis,vp8,vp8.0" }, | |
| 424 #endif | |
| 425 { "audio/webm", "vorbis" }, | 432 { "audio/webm", "vorbis" }, |
| 426 { "audio/wav", "1" } | 433 { "audio/wav", "1" } |
| 427 }; | 434 }; |
| 428 | 435 |
| 429 MimeUtil::MimeUtil() { | 436 MimeUtil::MimeUtil() { |
| 430 InitializeMimeTypeMaps(); | 437 InitializeMimeTypeMaps(); |
| 431 } | 438 } |
| 432 | 439 |
| 433 // static | 440 // static |
| 434 bool MimeUtil::AreSupportedCodecs(const MimeMappings& supported_codecs, | 441 bool MimeUtil::AreSupportedCodecs(const MimeMappings& supported_codecs, |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 464 for (size_t i = 0; i < arraysize(common_media_types); ++i) | 471 for (size_t i = 0; i < arraysize(common_media_types); ++i) |
| 465 media_map_.insert(common_media_types[i]); | 472 media_map_.insert(common_media_types[i]); |
| 466 #if defined(USE_PROPRIETARY_CODECS) | 473 #if defined(USE_PROPRIETARY_CODECS) |
| 467 for (size_t i = 0; i < arraysize(proprietary_media_types); ++i) | 474 for (size_t i = 0; i < arraysize(proprietary_media_types); ++i) |
| 468 media_map_.insert(proprietary_media_types[i]); | 475 media_map_.insert(proprietary_media_types[i]); |
| 469 #endif | 476 #endif |
| 470 | 477 |
| 471 for (size_t i = 0; i < arraysize(supported_javascript_types); ++i) | 478 for (size_t i = 0; i < arraysize(supported_javascript_types); ++i) |
| 472 javascript_map_.insert(supported_javascript_types[i]); | 479 javascript_map_.insert(supported_javascript_types[i]); |
| 473 | 480 |
| 474 for (size_t i = 0; i < arraysize(common_media_codecs); ++i) | 481 for (size_t i = 0; i < arraysize(common_media_codecs); ++i) { |
| 482 #if defined(OS_ANDROID) | |
| 483 if (IsCodecSupportedOnAndroid(common_media_codecs[i])) | |
|
scherkus (not reviewing)
2013/11/11 21:33:46
technically line 485 should be indented as this if
vignesh
2013/11/12 00:02:48
Nice idea. Done.
| |
| 484 #endif | |
| 475 codecs_map_.insert(common_media_codecs[i]); | 485 codecs_map_.insert(common_media_codecs[i]); |
| 486 } | |
| 476 #if defined(USE_PROPRIETARY_CODECS) | 487 #if defined(USE_PROPRIETARY_CODECS) |
| 477 for (size_t i = 0; i < arraysize(proprietary_media_codecs); ++i) | 488 for (size_t i = 0; i < arraysize(proprietary_media_codecs); ++i) |
| 478 codecs_map_.insert(proprietary_media_codecs[i]); | 489 codecs_map_.insert(proprietary_media_codecs[i]); |
| 479 #endif | 490 #endif |
| 480 | 491 |
| 481 // Initialize the strict supported media types. | 492 // Initialize the strict supported media types. |
| 482 for (size_t i = 0; i < arraysize(format_codec_mappings); ++i) { | 493 for (size_t i = 0; i < arraysize(format_codec_mappings); ++i) { |
| 483 std::vector<std::string> mime_type_codecs; | 494 std::vector<std::string> mime_type_codecs; |
| 484 ParseCodecString(format_codec_mappings[i].codecs_list, | 495 ParseCodecString(format_codec_mappings[i].codecs_list, |
| 485 &mime_type_codecs, | 496 &mime_type_codecs, |
| 486 false); | 497 false); |
| 487 | 498 |
| 488 MimeMappings codecs; | 499 MimeMappings codecs; |
| 489 for (size_t j = 0; j < mime_type_codecs.size(); ++j) | 500 for (size_t j = 0; j < mime_type_codecs.size(); ++j) { |
| 501 #if defined(OS_ANDROID) | |
| 502 if (IsCodecSupportedOnAndroid(mime_type_codecs[j])) | |
|
scherkus (not reviewing)
2013/11/11 21:33:46
ditto
vignesh
2013/11/12 00:02:48
Done.
| |
| 503 #endif | |
| 490 codecs.insert(mime_type_codecs[j]); | 504 codecs.insert(mime_type_codecs[j]); |
| 505 } | |
| 491 strict_format_map_[format_codec_mappings[i].mime_type] = codecs; | 506 strict_format_map_[format_codec_mappings[i].mime_type] = codecs; |
| 492 } | 507 } |
| 493 } | 508 } |
| 494 | 509 |
| 495 bool MimeUtil::IsSupportedImageMimeType(const std::string& mime_type) const { | 510 bool MimeUtil::IsSupportedImageMimeType(const std::string& mime_type) const { |
| 496 return image_map_.find(mime_type) != image_map_.end(); | 511 return image_map_.find(mime_type) != image_map_.end(); |
| 497 } | 512 } |
| 498 | 513 |
| 499 bool MimeUtil::IsSupportedMediaMimeType(const std::string& mime_type) const { | 514 bool MimeUtil::IsSupportedMediaMimeType(const std::string& mime_type) const { |
| 500 return media_map_.find(mime_type) != media_map_.end(); | 515 return media_map_.find(mime_type) != media_map_.end(); |
| (...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1000 post_data->append("\r\n" + value + "\r\n"); | 1015 post_data->append("\r\n" + value + "\r\n"); |
| 1001 } | 1016 } |
| 1002 | 1017 |
| 1003 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary, | 1018 void AddMultipartFinalDelimiterForUpload(const std::string& mime_boundary, |
| 1004 std::string* post_data) { | 1019 std::string* post_data) { |
| 1005 DCHECK(post_data); | 1020 DCHECK(post_data); |
| 1006 post_data->append("--" + mime_boundary + "--\r\n"); | 1021 post_data->append("--" + mime_boundary + "--\r\n"); |
| 1007 } | 1022 } |
| 1008 | 1023 |
| 1009 } // namespace net | 1024 } // namespace net |
| OLD | NEW |