summaryrefslogtreecommitdiffstats
path: root/net/base/platform_mime_util_mac.cc
diff options
context:
space:
mode:
authoravi@google.com <avi@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-31 18:39:52 +0000
committeravi@google.com <avi@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-31 18:39:52 +0000
commit11853ace9b087d6896e1bcd7cee161bed615b364 (patch)
tree11ad084e600a752859e336d462a1385994f681ef /net/base/platform_mime_util_mac.cc
parent7e2b810519af0721cc68057f71c006a623e480cc (diff)
downloadchromium_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.cc62
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