| Index: base/linux_util.cc
 | 
| ===================================================================
 | 
| --- base/linux_util.cc	(revision 33536)
 | 
| +++ base/linux_util.cc	(working copy)
 | 
| @@ -6,18 +6,20 @@
 | 
|  
 | 
|  #include <dirent.h>
 | 
|  #include <errno.h>
 | 
| +#include <glib.h>
 | 
|  #include <stdlib.h>
 | 
|  #include <sys/stat.h>
 | 
| -#include <sys/types.h>
 | 
|  #include <unistd.h>
 | 
|  
 | 
|  #include <vector>
 | 
|  
 | 
|  #include "base/command_line.h"
 | 
|  #include "base/lock.h"
 | 
| +#include "base/path_service.h"
 | 
|  #include "base/process_util.h"
 | 
|  #include "base/singleton.h"
 | 
|  #include "base/string_util.h"
 | 
| +#include "base/third_party/xdg_user_dirs/xdg_user_dir_lookup.h"
 | 
|  
 | 
|  namespace {
 | 
|  
 | 
| @@ -179,6 +181,23 @@
 | 
|      "Unknown";
 | 
|  #endif
 | 
|  
 | 
| +FilePath GetHomeDir(EnvironmentVariableGetter* env) {
 | 
| +  std::string home_dir;
 | 
| +  if (env->Getenv("HOME", &home_dir) && !home_dir.empty())
 | 
| +    return FilePath(home_dir);
 | 
| +
 | 
| +  home_dir = g_get_home_dir();
 | 
| +  if (!home_dir.empty())
 | 
| +    return FilePath(home_dir);
 | 
| +
 | 
| +  FilePath rv;
 | 
| +  if (PathService::Get(base::DIR_TEMP, &rv))
 | 
| +    return rv;
 | 
| +
 | 
| +  // Last resort.
 | 
| +  return FilePath("/tmp");
 | 
| +}
 | 
| +
 | 
|  std::string GetLinuxDistro() {
 | 
|  #if defined(OS_CHROMEOS)
 | 
|    return linux_distro;
 | 
| @@ -215,6 +234,25 @@
 | 
|  #endif
 | 
|  }
 | 
|  
 | 
| +FilePath GetXDGDirectory(EnvironmentVariableGetter* env,
 | 
| +                         const char* env_name, const char* fallback_dir) {
 | 
| +  std::string env_value;
 | 
| +  if (env->Getenv(env_name, &env_value) && !env_value.empty())
 | 
| +    return FilePath(env_value);
 | 
| +  return GetHomeDir(env).Append(fallback_dir);
 | 
| +}
 | 
| +
 | 
| +FilePath GetXDGUserDirectory(EnvironmentVariableGetter* env,
 | 
| +                             const char* dir_name, const char* fallback_dir) {
 | 
| +  char* xdg_dir = xdg_user_dir_lookup(dir_name);
 | 
| +  if (xdg_dir) {
 | 
| +    FilePath rv(xdg_dir);
 | 
| +    free(xdg_dir);
 | 
| +    return rv;
 | 
| +  }
 | 
| +  return GetHomeDir(env).Append(fallback_dir);
 | 
| +}
 | 
| +
 | 
|  // static
 | 
|  EnvironmentVariableGetter* EnvironmentVariableGetter::Create() {
 | 
|    return new EnvironmentVariableGetterImpl();
 | 
| 
 |