1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/base/platform_mime_util.h"
6
7 #include <CoreServices/CoreServices.h>
8
9 #include <string>
10
11 #include "base/mac/scoped_cftyperef.h"
12 #include "base/sys_string_conversions.h"
13
14 namespace net {
15
GetPlatformMimeTypeFromExtension(const FilePath::StringType & ext,std::string * result) const16 bool PlatformMimeUtil::GetPlatformMimeTypeFromExtension(
17 const FilePath::StringType& ext, std::string* result) const {
18 std::string ext_nodot = ext;
19 if (ext_nodot.length() >= 1 && ext_nodot[0] == L'.')
20 ext_nodot.erase(ext_nodot.begin());
21 base::mac::ScopedCFTypeRef<CFStringRef> ext_ref(
22 base::SysUTF8ToCFStringRef(ext_nodot));
23 if (!ext_ref)
24 return false;
25 base::mac::ScopedCFTypeRef<CFStringRef> uti(
26 UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
27 ext_ref,
28 NULL));
29 if (!uti)
30 return false;
31 base::mac::ScopedCFTypeRef<CFStringRef> mime_ref(
32 UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType));
33 if (!mime_ref)
34 return false;
35
36 *result = base::SysCFStringRefToUTF8(mime_ref);
37 return true;
38 }
39
GetPreferredExtensionForMimeType(const std::string & mime_type,FilePath::StringType * ext) const40 bool PlatformMimeUtil::GetPreferredExtensionForMimeType(
41 const std::string& mime_type, FilePath::StringType* ext) const {
42 base::mac::ScopedCFTypeRef<CFStringRef> mime_ref(
43 base::SysUTF8ToCFStringRef(mime_type));
44 if (!mime_ref)
45 return false;
46 base::mac::ScopedCFTypeRef<CFStringRef> uti(
47 UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType,
48 mime_ref,
49 NULL));
50 if (!uti)
51 return false;
52 base::mac::ScopedCFTypeRef<CFStringRef> ext_ref(
53 UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension));
54 if (!ext_ref)
55 return false;
56
57 *ext = base::SysCFStringRefToUTF8(ext_ref);
58 return true;
59 }
60
61 } // namespace net
62