diff options
author | avi@google.com <avi@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-31 18:39:52 +0000 |
---|---|---|
committer | avi@google.com <avi@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-31 18:39:52 +0000 |
commit | 11853ace9b087d6896e1bcd7cee161bed615b364 (patch) | |
tree | 11ad084e600a752859e336d462a1385994f681ef /net/base/platform_mime_util_mac.cc | |
parent | 7e2b810519af0721cc68057f71c006a623e480cc (diff) | |
download | chromium_src-11853ace9b087d6896e1bcd7cee161bed615b364.zip chromium_src-11853ace9b087d6896e1bcd7cee161bed615b364.tar.gz chromium_src-11853ace9b087d6896e1bcd7cee161bed615b364.tar.bz2 |
There's no Objective in this C++.
Review URL: http://codereview.chromium.org/8773
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4307 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/platform_mime_util_mac.cc')
-rw-r--r-- | net/base/platform_mime_util_mac.cc | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/net/base/platform_mime_util_mac.cc b/net/base/platform_mime_util_mac.cc new file mode 100644 index 0000000..221cf51 --- /dev/null +++ b/net/base/platform_mime_util_mac.cc @@ -0,0 +1,62 @@ +// 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 <CoreServices/CoreServices.h> +#include <string> + +#include "base/scoped_cftyperef.h" +#include "base/sys_string_conversions.h" +#include "net/base/platform_mime_util.h" + +namespace net { + +bool PlatformMimeUtil::GetPlatformMimeTypeFromExtension( + const std::wstring& ext, std::string* result) const { + std::wstring ext_nodot = ext; + if (ext_nodot.length() >= 1 && ext_nodot[0] == L'.') + ext_nodot.erase(ext_nodot.begin()); + scoped_cftyperef<CFStringRef> ext_ref(base::SysWideToCFStringRef(ext_nodot)); + if (!ext_ref) + return false; + scoped_cftyperef<CFStringRef> uti( + UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, + ext_ref, + NULL)); + if (!uti) + return false; + scoped_cftyperef<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, std::wstring* ext) const { + scoped_cftyperef<CFStringRef> mime_ref(base::SysUTF8ToCFStringRef(mime_type)); + if (!mime_ref) + return false; + scoped_cftyperef<CFStringRef> uti( + UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType, + mime_ref, + NULL)); + if (!uti) + return false; + scoped_cftyperef<CFStringRef> ext_ref( + UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension)); + if (!ext_ref) + return false; + + ext_ref.reset(CFStringCreateWithFormat(kCFAllocatorDefault, + NULL, + CFSTR(".%@"), + ext_ref.get())); + + *ext = base::SysCFStringRefToWide(ext_ref); + return true; +} + +} // namespace net |