| // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/base/platform_mime_util.h" |
| |
| #include <CoreServices/CoreServices.h> |
| |
| #include <string> |
| |
| #include "base/mac/scoped_cftyperef.h" |
| #include "base/sys_string_conversions.h" |
| |
| namespace net { |
| |
| bool PlatformMimeUtil::GetPlatformMimeTypeFromExtension( |
| const FilePath::StringType& ext, std::string* result) const { |
| std::string ext_nodot = ext; |
| if (ext_nodot.length() >= 1 && ext_nodot[0] == L'.') |
| ext_nodot.erase(ext_nodot.begin()); |
| base::mac::ScopedCFTypeRef<CFStringRef> ext_ref( |
| base::SysUTF8ToCFStringRef(ext_nodot)); |
| if (!ext_ref) |
| return false; |
| base::mac::ScopedCFTypeRef<CFStringRef> uti( |
| UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, |
| ext_ref, |
| NULL)); |
| if (!uti) |
| return false; |
| base::mac::ScopedCFTypeRef<CFStringRef> mime_ref( |
| UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)); |
| if (!mime_ref) |
| return false; |
| |
| *result = base::SysCFStringRefToUTF8(mime_ref); |
| return true; |
| } |
| |
| bool PlatformMimeUtil::GetPreferredExtensionForMimeType( |
| const std::string& mime_type, FilePath::StringType* ext) const { |
| base::mac::ScopedCFTypeRef<CFStringRef> mime_ref( |
| base::SysUTF8ToCFStringRef(mime_type)); |
| if (!mime_ref) |
| return false; |
| base::mac::ScopedCFTypeRef<CFStringRef> uti( |
| UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, |
| mime_ref, |
| NULL)); |
| if (!uti) |
| return false; |
| base::mac::ScopedCFTypeRef<CFStringRef> ext_ref( |
| UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension)); |
| if (!ext_ref) |
| return false; |
| |
| *ext = base::SysCFStringRefToUTF8(ext_ref); |
| return true; |
| } |
| |
| } // namespace net |