15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/nix/mime_util_xdg.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/files/file_path.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/lazy_instance.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/synchronization/lock.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/third_party/xdg_mime/xdgmime.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread_restrictions.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace nix {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// None of the XDG stuff is thread-safe, so serialize all access under
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// this lock.
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)LazyInstance<Lock>::Leaky g_mime_util_xdg_lock = LAZY_INSTANCE_INITIALIZER;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetFileMimeType(const FilePath& filepath) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (filepath.empty())
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return std::string();
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ThreadRestrictions::AssertIOAllowed();
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  AutoLock scoped_lock(g_mime_util_xdg_lock.Get());
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return xdg_mime_get_mime_type_from_file_name(filepath.value().c_str());
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetDataMimeType(const std::string& data) {
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ThreadRestrictions::AssertIOAllowed();
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  AutoLock scoped_lock(g_mime_util_xdg_lock.Get());
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return xdg_mime_get_mime_type_for_data(data.data(), data.length(), NULL);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace nix
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace base
40