1// Copyright (c) 2012 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#ifndef BASE_NIX_XDG_UTIL_H_
6#define BASE_NIX_XDG_UTIL_H_
7
8// XDG refers to http://en.wikipedia.org/wiki/Freedesktop.org .
9// This file contains utilities found across free desktop environments.
10//
11// TODO(brettw) this file should be in app/x11, but is currently used by
12// net. We should have a net API to allow the embedder to specify the behavior
13// that it uses XDG for, and then move this file.
14
15#include "base/base_export.h"
16
17#ifdef nix
18#error asdf
19#endif
20
21namespace base {
22
23class Environment;
24class FilePath;
25
26namespace nix {
27
28// The default XDG config directory name.
29BASE_EXPORT extern const char kDotConfigDir[];
30
31// The XDG config directory environment variable.
32BASE_EXPORT extern const char kXdgConfigHomeEnvVar[];
33
34// Utility function for getting XDG directories.
35// |env_name| is the name of an environment variable that we want to use to get
36// a directory path. |fallback_dir| is the directory relative to $HOME that we
37// use if |env_name| cannot be found or is empty. |fallback_dir| may be NULL.
38// Examples of |env_name| are XDG_CONFIG_HOME and XDG_DATA_HOME.
39BASE_EXPORT FilePath GetXDGDirectory(Environment* env, const char* env_name,
40                                     const char* fallback_dir);
41
42// Wrapper around xdg_user_dir_lookup() from src/base/third_party/xdg-user-dirs
43// This looks up "well known" user directories like the desktop and music
44// folder. Examples of |dir_name| are DESKTOP and MUSIC.
45BASE_EXPORT FilePath GetXDGUserDirectory(const char* dir_name,
46                                         const char* fallback_dir);
47
48enum DesktopEnvironment {
49  DESKTOP_ENVIRONMENT_OTHER,
50  DESKTOP_ENVIRONMENT_GNOME,
51  // KDE3 and KDE4 are sufficiently different that we count
52  // them as two different desktop environments here.
53  DESKTOP_ENVIRONMENT_KDE3,
54  DESKTOP_ENVIRONMENT_KDE4,
55  DESKTOP_ENVIRONMENT_UNITY,
56  DESKTOP_ENVIRONMENT_XFCE,
57};
58
59// Return an entry from the DesktopEnvironment enum with a best guess
60// of which desktop environment we're using.  We use this to know when
61// to attempt to use preferences from the desktop environment --
62// proxy settings, password manager, etc.
63BASE_EXPORT DesktopEnvironment GetDesktopEnvironment(Environment* env);
64
65// Return a string representation of the given desktop environment.
66// May return NULL in the case of DESKTOP_ENVIRONMENT_OTHER.
67BASE_EXPORT const char* GetDesktopEnvironmentName(DesktopEnvironment env);
68// Convenience wrapper that calls GetDesktopEnvironment() first.
69BASE_EXPORT const char* GetDesktopEnvironmentName(Environment* env);
70
71}  // namespace nix
72}  // namespace base
73
74#endif  // BASE_NIX_XDG_UTIL_H_
75