| 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 "net/base/platform_mime_util.h" | 5 #include "net/base/platform_mime_util.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| 11 | 11 |
| 12 #if defined(OS_ANDROID) | 12 #if defined(OS_ANDROID) |
| 13 #include "net/android/network_library.h" | 13 #include "net/android/network_library.h" |
| 14 #else | 14 #else |
| 15 #include "base/nix/mime_util_xdg.h" | 15 #include "base/nix/mime_util_xdg.h" |
| 16 #endif | 16 #endif |
| 17 | 17 |
| 18 namespace net { | 18 namespace net { |
| 19 | 19 |
| 20 #if defined(OS_ANDROID) | 20 #if defined(OS_ANDROID) |
| 21 bool PlatformMimeUtil::GetPlatformMimeTypeFromExtension( | 21 bool PlatformMimeUtil::GetPlatformMimeTypeFromExtension( |
| 22 const base::FilePath::StringType& ext, std::string* result) const { | 22 const base::FilePath::StringType& ext, |
| 23 std::string* result) const { |
| 23 return android::GetMimeTypeFromExtension(ext, result); | 24 return android::GetMimeTypeFromExtension(ext, result); |
| 24 } | 25 } |
| 25 #else | 26 #else |
| 26 bool PlatformMimeUtil::GetPlatformMimeTypeFromExtension( | 27 bool PlatformMimeUtil::GetPlatformMimeTypeFromExtension( |
| 27 const base::FilePath::StringType& ext, std::string* result) const { | 28 const base::FilePath::StringType& ext, |
| 29 std::string* result) const { |
| 28 // TODO(thestig): This is a temporary hack until we can fix this | 30 // TODO(thestig): This is a temporary hack until we can fix this |
| 29 // properly in test shell / webkit. | 31 // properly in test shell / webkit. |
| 30 // We have to play dumb and not return application/x-perl here | 32 // We have to play dumb and not return application/x-perl here |
| 31 // to make the reload-subframe-object layout test happy. | 33 // to make the reload-subframe-object layout test happy. |
| 32 if (ext == "pl") | 34 if (ext == "pl") |
| 33 return false; | 35 return false; |
| 34 | 36 |
| 35 base::FilePath dummy_path("foo." + ext); | 37 base::FilePath dummy_path("foo." + ext); |
| 36 std::string out = base::nix::GetFileMimeType(dummy_path); | 38 std::string out = base::nix::GetFileMimeType(dummy_path); |
| 37 | 39 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 53 } | 55 } |
| 54 | 56 |
| 55 #endif // defined(OS_ANDROID) | 57 #endif // defined(OS_ANDROID) |
| 56 | 58 |
| 57 struct MimeToExt { | 59 struct MimeToExt { |
| 58 const char* mime_type; | 60 const char* mime_type; |
| 59 const char* ext; | 61 const char* ext; |
| 60 }; | 62 }; |
| 61 | 63 |
| 62 const struct MimeToExt mime_type_ext_map[] = { | 64 const struct MimeToExt mime_type_ext_map[] = { |
| 63 {"application/pdf", "pdf"}, | 65 {"application/pdf", "pdf"}, |
| 64 {"application/x-tar", "tar"}, | 66 {"application/x-tar", "tar"}, |
| 65 {"application/zip", "zip"}, | 67 {"application/zip", "zip"}, |
| 66 {"audio/mpeg", "mp3"}, | 68 {"audio/mpeg", "mp3"}, |
| 67 {"image/gif", "gif"}, | 69 {"image/gif", "gif"}, |
| 68 {"image/jpeg", "jpg"}, | 70 {"image/jpeg", "jpg"}, |
| 69 {"image/png", "png"}, | 71 {"image/png", "png"}, |
| 70 {"text/html", "html"}, | 72 {"text/html", "html"}, |
| 71 {"video/mp4", "mp4"}, | 73 {"video/mp4", "mp4"}, |
| 72 {"video/mpeg", "mpg"}, | 74 {"video/mpeg", "mpg"}, |
| 73 {"text/plain", "txt"}, | 75 {"text/plain", "txt"}, |
| 74 {"text/x-sh", "sh"}, | 76 {"text/x-sh", "sh"}, |
| 75 }; | 77 }; |
| 76 | 78 |
| 77 bool PlatformMimeUtil::GetPreferredExtensionForMimeType( | 79 bool PlatformMimeUtil::GetPreferredExtensionForMimeType( |
| 78 const std::string& mime_type, base::FilePath::StringType* ext) const { | 80 const std::string& mime_type, |
| 79 | 81 base::FilePath::StringType* ext) const { |
| 80 for (size_t x = 0; | 82 for (size_t x = 0; x < (sizeof(mime_type_ext_map) / sizeof(MimeToExt)); x++) { |
| 81 x < (sizeof(mime_type_ext_map) / sizeof(MimeToExt)); | |
| 82 x++) { | |
| 83 if (mime_type_ext_map[x].mime_type == mime_type) { | 83 if (mime_type_ext_map[x].mime_type == mime_type) { |
| 84 *ext = mime_type_ext_map[x].ext; | 84 *ext = mime_type_ext_map[x].ext; |
| 85 return true; | 85 return true; |
| 86 } | 86 } |
| 87 } | 87 } |
| 88 | 88 |
| 89 // TODO(dhg): Fix this the right way by implementing what's said below. | 89 // TODO(dhg): Fix this the right way by implementing what's said below. |
| 90 // Unlike GetPlatformMimeTypeFromExtension, this method doesn't have a | 90 // Unlike GetPlatformMimeTypeFromExtension, this method doesn't have a |
| 91 // default list that it uses, but for now we are also returning false since | 91 // default list that it uses, but for now we are also returning false since |
| 92 // this doesn't really matter as much under Linux. | 92 // this doesn't really matter as much under Linux. |
| 93 // | 93 // |
| 94 // If we wanted to do this properly, we would read the mime.cache file which | 94 // If we wanted to do this properly, we would read the mime.cache file which |
| 95 // has a section where they assign a glob (*.gif) to a mimetype | 95 // has a section where they assign a glob (*.gif) to a mimetype |
| 96 // (image/gif). We look up the "heaviest" glob for a certain mime type and | 96 // (image/gif). We look up the "heaviest" glob for a certain mime type and |
| 97 // then then try to chop off "*.". | 97 // then then try to chop off "*.". |
| 98 | 98 |
| 99 return false; | 99 return false; |
| 100 } | 100 } |
| 101 | 101 |
| 102 void PlatformMimeUtil::GetPlatformExtensionsForMimeType( | 102 void PlatformMimeUtil::GetPlatformExtensionsForMimeType( |
| 103 const std::string& mime_type, | 103 const std::string& mime_type, |
| 104 base::hash_set<base::FilePath::StringType>* extensions) const { | 104 base::hash_set<base::FilePath::StringType>* extensions) const { |
| 105 base::FilePath::StringType ext; | 105 base::FilePath::StringType ext; |
| 106 if (GetPreferredExtensionForMimeType(mime_type, &ext)) | 106 if (GetPreferredExtensionForMimeType(mime_type, &ext)) |
| 107 extensions->insert(ext); | 107 extensions->insert(ext); |
| 108 } | 108 } |
| 109 | 109 |
| 110 } // namespace net | 110 } // namespace net |
| OLD | NEW |