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