• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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