diff options
author | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-02 08:45:01 +0000 |
---|---|---|
committer | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-02 08:45:01 +0000 |
commit | 9e9b6e8ee77229781fa8581b7f46413024404a5f (patch) | |
tree | 5b3dfc45e4e65db382138b64e5a63ac3c3b0dad6 /chrome | |
parent | 7aadea0cf98791bbbf163b0d2ef078c7697fea4e (diff) | |
download | chromium_src-9e9b6e8ee77229781fa8581b7f46413024404a5f.zip chromium_src-9e9b6e8ee77229781fa8581b7f46413024404a5f.tar.gz chromium_src-9e9b6e8ee77229781fa8581b7f46413024404a5f.tar.bz2 |
Move some XDG code from chrome to base, make DIR_USER_CACHE generic rather than Chromium specific, and clean up a few headers.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/449048
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@33565 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/process_singleton_win.cc | 1 | ||||
-rw-r--r-- | chrome/browser/profile.cc | 17 | ||||
-rwxr-xr-x | chrome/chrome.gyp | 7 | ||||
-rw-r--r-- | chrome/common/chrome_paths.cc | 10 | ||||
-rw-r--r-- | chrome/common/chrome_paths.h | 1 | ||||
-rw-r--r-- | chrome/common/chrome_paths_internal.h | 5 | ||||
-rw-r--r-- | chrome/common/chrome_paths_linux.cc | 90 | ||||
-rw-r--r-- | chrome/third_party/xdg_user_dirs/README.chromium | 3 | ||||
-rw-r--r-- | chrome/third_party/xdg_user_dirs/xdg_user_dir_lookup.cc | 232 | ||||
-rw-r--r-- | chrome/third_party/xdg_user_dirs/xdg_user_dir_lookup.h | 33 |
10 files changed, 37 insertions, 362 deletions
diff --git a/chrome/browser/process_singleton_win.cc b/chrome/browser/process_singleton_win.cc index 9997efd..0f2b9af 100644 --- a/chrome/browser/process_singleton_win.cc +++ b/chrome/browser/process_singleton_win.cc @@ -8,6 +8,7 @@ #include "app/win_util.h" #include "base/base_paths.h" #include "base/command_line.h" +#include "base/path_service.h" #include "base/process_util.h" #include "base/win_util.h" #include "chrome/browser/browser_init.h" diff --git a/chrome/browser/profile.cc b/chrome/browser/profile.cc index ebe224f..278a297 100644 --- a/chrome/browser/profile.cc +++ b/chrome/browser/profile.cc @@ -609,9 +609,22 @@ ProfileImpl::ProfileImpl(const FilePath& path) base_cache_path_ = user_cache_path; } } +#elif defined(OS_POSIX) // Posix minus Mac. + // See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + // for a spec on where cache files go. The net effect for most systems is we + // use ~/.cache/chromium/ for Chromium and ~/.cache/google-chrome/ for + // official builds. + if (!PathService::IsOverridden(chrome::DIR_USER_DATA)) { +#if defined(GOOGLE_CHROME_BUILD) + const char kCacheDir[] = "google-chrome"; #else - if (!PathService::IsOverridden(chrome::DIR_USER_DATA)) - PathService::Get(chrome::DIR_USER_CACHE, &base_cache_path_); + const char kCacheDir[] = "chromium"; +#endif + PathService::Get(base::DIR_USER_CACHE, &base_cache_path_); + base_cache_path_ = base_cache_path_.Append(kCacheDir); + if (!file_util::PathExists(base_cache_path_)) + file_util::CreateDirectory(base_cache_path_); + } #endif if (base_cache_path_.empty()) base_cache_path_ = path_; diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index 9ddf866..7126672 100755 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp @@ -704,7 +704,6 @@ 'common/x11_util_internal.h', 'common/zip.cc', # Requires zlib directly. 'common/zip.h', - 'third_party/xdg_user_dirs/xdg_user_dir_lookup.cc', ], 'direct_dependent_settings': { 'include_dirs': [ @@ -729,11 +728,7 @@ '-lXext', ], }, - }, { # else: 'OS!="linux"' - 'sources!': [ - 'third_party/xdg_user_dirs/xdg_user_dir_lookup.cc', - ], - }], + },], ['OS=="linux" and selinux==1', { 'dependencies': [ '../build/linux/system.gyp:selinux', diff --git a/chrome/common/chrome_paths.cc b/chrome/common/chrome_paths.cc index 4382793..9b02bb7 100644 --- a/chrome/common/chrome_paths.cc +++ b/chrome/common/chrome_paths.cc @@ -78,16 +78,6 @@ bool PathProvider(int key, FilePath* result) { } create_dir = true; break; - case chrome::DIR_USER_CACHE: -#if defined(OS_LINUX) - if (!GetUserCacheDirectory(&cur)) - return false; - create_dir = true; -#else - // No concept of a separate cache directory on non-Linux systems. - return false; -#endif - break; case chrome::DIR_USER_DOCUMENTS: if (!GetUserDocumentsDirectory(&cur)) return false; diff --git a/chrome/common/chrome_paths.h b/chrome/common/chrome_paths.h index 1577fc2..4382c62 100644 --- a/chrome/common/chrome_paths.h +++ b/chrome/common/chrome_paths.h @@ -18,7 +18,6 @@ enum { DIR_APP = PATH_START, // directory where dlls and data reside DIR_LOGS, // directory where logs should be written DIR_USER_DATA, // directory where user data can be written - DIR_USER_CACHE, // directory where user cache data resides DIR_CRASH_DUMPS, // directory where crash dumps are written DIR_USER_DESKTOP, // directory that correspond to the desktop DIR_INSPECTOR, // directory where web inspector is located diff --git a/chrome/common/chrome_paths_internal.h b/chrome/common/chrome_paths_internal.h index 4dc4e0f..dc726d6 100644 --- a/chrome/common/chrome_paths_internal.h +++ b/chrome/common/chrome_paths_internal.h @@ -19,11 +19,6 @@ bool GetDefaultUserDataDirectory(FilePath* result); // CF and Google Chrome want to share the same binaries. bool GetChromeFrameUserDataDirectory(FilePath* result); -#if defined(OS_LINUX) -// Get the path to the user's cache directory. -bool GetUserCacheDirectory(FilePath* result); -#endif - // Get the path to the user's documents directory. bool GetUserDocumentsDirectory(FilePath* result); diff --git a/chrome/common/chrome_paths_linux.cc b/chrome/common/chrome_paths_linux.cc index 71cb03f..5a880e1 100644 --- a/chrome/common/chrome_paths_linux.cc +++ b/chrome/common/chrome_paths_linux.cc @@ -4,56 +4,8 @@ #include "chrome/common/chrome_paths_internal.h" -#include <glib.h> -#include <stdlib.h> - -#include "base/file_path.h" -#include "base/path_service.h" -#include "chrome/third_party/xdg_user_dirs/xdg_user_dir_lookup.h" - -namespace { - -FilePath GetHomeDir() { - const char *home_dir = getenv("HOME"); - - if (home_dir && home_dir[0]) - return FilePath(home_dir); - - home_dir = g_get_home_dir(); - if (home_dir && home_dir[0]) - return FilePath(home_dir); - - FilePath rv; - if (PathService::Get(base::DIR_TEMP, &rv)) - return rv; - - /* last resort */ - return FilePath("/tmp/"); -} - -// Wrapper around xdg_user_dir_lookup() from -// src/chrome/third_party/xdg-user-dirs -FilePath GetXDGUserDirectory(const char* env_name, const char* fallback_dir) { - char* xdg_dir = xdg_user_dir_lookup(env_name); - if (xdg_dir) { - FilePath rv(xdg_dir); - free(xdg_dir); - return rv; - } - return GetHomeDir().Append(fallback_dir); -} - -// |env_name| is the name of an environment variable that we want to use to get -// a directory path. |fallback_dir| is the directory relative to $HOME that we -// use if |env_name| cannot be found or is empty. |fallback_dir| may be NULL. -FilePath GetXDGDirectory(const char* env_name, const char* fallback_dir) { - const char* env_value = getenv(env_name); - if (env_value && env_value[0]) - return FilePath(env_value); - return GetHomeDir().Append(fallback_dir); -} - -} // namespace +#include "base/linux_util.h" +#include "base/scoped_ptr.h" namespace chrome { @@ -63,7 +15,10 @@ namespace chrome { // ~/.config/google-chrome/ for official builds. // (This also helps us sidestep issues with other apps grabbing ~/.chromium .) bool GetDefaultUserDataDirectory(FilePath* result) { - FilePath config_dir(GetXDGDirectory("XDG_CONFIG_HOME", ".config")); + scoped_ptr<base::EnvironmentVariableGetter> env( + base::EnvironmentVariableGetter::Create()); + FilePath config_dir( + base::GetXDGDirectory(env.get(), "XDG_CONFIG_HOME", ".config")); #if defined(GOOGLE_CHROME_BUILD) *result = config_dir.Append("google-chrome"); #else @@ -73,7 +28,10 @@ bool GetDefaultUserDataDirectory(FilePath* result) { } bool GetChromeFrameUserDataDirectory(FilePath* result) { - FilePath config_dir(GetXDGDirectory("XDG_CONFIG_HOME", ".config")); + scoped_ptr<base::EnvironmentVariableGetter> env( + base::EnvironmentVariableGetter::Create()); + FilePath config_dir( + base::GetXDGDirectory(env.get(), "XDG_CONFIG_HOME", ".config")); #if defined(GOOGLE_CHROME_BUILD) *result = config_dir.Append("google-chrome-frame"); #else @@ -82,31 +40,21 @@ bool GetChromeFrameUserDataDirectory(FilePath* result) { return true; } -// See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html -// for a spec on where cache files go. The net effect for most -// systems is we use ~/.cache/chromium/ for Chromium and -// ~/.cache/google-chrome/ for official builds. -bool GetUserCacheDirectory(FilePath* result) { - FilePath cache_dir(GetXDGDirectory("XDG_CACHE_HOME", ".cache")); -#if defined(GOOGLE_CHROME_BUILD) - *result = cache_dir.Append("google-chrome"); -#else - *result = cache_dir.Append("chromium"); -#endif - return true; -} - bool GetUserDocumentsDirectory(FilePath* result) { - *result = GetXDGUserDirectory("DOCUMENTS", "Documents"); + scoped_ptr<base::EnvironmentVariableGetter> env( + base::EnvironmentVariableGetter::Create()); + *result = base::GetXDGUserDirectory(env.get(), "DOCUMENTS", "Documents"); return true; } // We respect the user's preferred download location, unless it is // ~ or their desktop directory, in which case we default to ~/Downloads. bool GetUserDownloadsDirectory(FilePath* result) { - *result = GetXDGUserDirectory("DOWNLOAD", "Downloads"); + scoped_ptr<base::EnvironmentVariableGetter> env( + base::EnvironmentVariableGetter::Create()); + *result = base::GetXDGUserDirectory(env.get(), "DOWNLOAD", "Downloads"); - FilePath home = GetHomeDir(); + FilePath home = base::GetHomeDir(env.get()); if (*result == home) { *result = home.Append("Downloads"); return true; @@ -122,7 +70,9 @@ bool GetUserDownloadsDirectory(FilePath* result) { } bool GetUserDesktop(FilePath* result) { - *result = GetXDGUserDirectory("DESKTOP", "Desktop"); + scoped_ptr<base::EnvironmentVariableGetter> env( + base::EnvironmentVariableGetter::Create()); + *result = base::GetXDGUserDirectory(env.get(), "DESKTOP", "Desktop"); return true; } diff --git a/chrome/third_party/xdg_user_dirs/README.chromium b/chrome/third_party/xdg_user_dirs/README.chromium deleted file mode 100644 index 9dc2103..0000000 --- a/chrome/third_party/xdg_user_dirs/README.chromium +++ /dev/null @@ -1,3 +0,0 @@ -This directory include xdg-user-dir-lookup.c renamed as xdg_user_dir_lookup.cc -from xdg-user-dirs 0.10. We made xdg_user_dir_lookup() non-static and added a -xdg_user_dir_lookup.h. diff --git a/chrome/third_party/xdg_user_dirs/xdg_user_dir_lookup.cc b/chrome/third_party/xdg_user_dirs/xdg_user_dir_lookup.cc deleted file mode 100644 index 343f70c..0000000 --- a/chrome/third_party/xdg_user_dirs/xdg_user_dir_lookup.cc +++ /dev/null @@ -1,232 +0,0 @@ -/* - This file is not licenced under the GPL like the rest of the code. - Its is under the MIT license, to encourage reuse by cut-and-paste. - - Copyright (c) 2007 Red Hat, inc - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -/** - * xdg_user_dir_lookup_with_fallback: - * @type: a string specifying the type of directory - * @fallback: value to use if the directory isn't specified by the user - * @returns: a newly allocated absolute pathname - * - * Looks up a XDG user directory of the specified type. - * Example of types are "DESKTOP" and "DOWNLOAD". - * - * In case the user hasn't specified any directory for the specified - * type the value returned is @fallback. - * - * The return value is newly allocated and must be freed with - * free(). The return value is never NULL if @fallback != NULL, unless - * out of memory. - **/ -static char * -xdg_user_dir_lookup_with_fallback (const char *type, const char *fallback) -{ - FILE *file; - char *home_dir, *config_home, *config_file; - char buffer[512]; - char *user_dir; - char *p, *d; - int len; - int relative; - - home_dir = getenv ("HOME"); - - if (home_dir == NULL) - goto error; - - config_home = getenv ("XDG_CONFIG_HOME"); - if (config_home == NULL || config_home[0] == 0) - { - config_file = (char*) malloc (strlen (home_dir) + strlen ("/.config/user-dirs.dirs") + 1); - if (config_file == NULL) - goto error; - - strcpy (config_file, home_dir); - strcat (config_file, "/.config/user-dirs.dirs"); - } - else - { - config_file = (char*) malloc (strlen (config_home) + strlen ("/user-dirs.dirs") + 1); - if (config_file == NULL) - goto error; - - strcpy (config_file, config_home); - strcat (config_file, "/user-dirs.dirs"); - } - - file = fopen (config_file, "r"); - free (config_file); - if (file == NULL) - goto error; - - user_dir = NULL; - while (fgets (buffer, sizeof (buffer), file)) - { - /* Remove newline at end */ - len = strlen (buffer); - if (len > 0 && buffer[len-1] == '\n') - buffer[len-1] = 0; - - p = buffer; - while (*p == ' ' || *p == '\t') - p++; - - if (strncmp (p, "XDG_", 4) != 0) - continue; - p += 4; - if (strncmp (p, type, strlen (type)) != 0) - continue; - p += strlen (type); - if (strncmp (p, "_DIR", 4) != 0) - continue; - p += 4; - - while (*p == ' ' || *p == '\t') - p++; - - if (*p != '=') - continue; - p++; - - while (*p == ' ' || *p == '\t') - p++; - - if (*p != '"') - continue; - p++; - - relative = 0; - if (strncmp (p, "$HOME/", 6) == 0) - { - p += 6; - relative = 1; - } - else if (*p != '/') - continue; - - if (relative) - { - user_dir = (char*) malloc (strlen (home_dir) + 1 + strlen (p) + 1); - if (user_dir == NULL) - goto error2; - - strcpy (user_dir, home_dir); - strcat (user_dir, "/"); - } - else - { - user_dir = (char*) malloc (strlen (p) + 1); - if (user_dir == NULL) - goto error2; - - *user_dir = 0; - } - - d = user_dir + strlen (user_dir); - while (*p && *p != '"') - { - if ((*p == '\\') && (*(p+1) != 0)) - p++; - *d++ = *p++; - } - *d = 0; - } -error2: - fclose (file); - - if (user_dir) - return user_dir; - - error: - if (fallback) - return strdup (fallback); - return NULL; -} - -/** - * xdg_user_dir_lookup: - * @type: a string specifying the type of directory - * @returns: a newly allocated absolute pathname - * - * Looks up a XDG user directory of the specified type. - * Example of types are "DESKTOP" and "DOWNLOAD". - * - * The return value is always != NULL (unless out of memory), - * and if a directory - * for the type is not specified by the user the default - * is the home directory. Except for DESKTOP which defaults - * to ~/Desktop. - * - * The return value is newly allocated and must be freed with - * free(). - **/ -char * -xdg_user_dir_lookup (const char *type) -{ - char *dir, *home_dir, *user_dir; - - dir = xdg_user_dir_lookup_with_fallback (type, NULL); - if (dir != NULL) - return dir; - - home_dir = getenv ("HOME"); - - if (home_dir == NULL) - return strdup ("/tmp"); - - /* Special case desktop for historical compatibility */ - if (strcmp (type, "DESKTOP") == 0) - { - user_dir = (char*) malloc (strlen (home_dir) + strlen ("/Desktop") + 1); - if (user_dir == NULL) - return NULL; - - strcpy (user_dir, home_dir); - strcat (user_dir, "/Desktop"); - return user_dir; - } - - return strdup (home_dir); -} - -#ifdef STANDALONE_XDG_USER_DIR_LOOKUP -int -main (int argc, char *argv[]) -{ - if (argc != 2) - { - fprintf (stderr, "Usage %s <dir-type>\n", argv[0]); - exit (1); - } - - printf ("%s\n", xdg_user_dir_lookup (argv[1])); - return 0; -} -#endif diff --git a/chrome/third_party/xdg_user_dirs/xdg_user_dir_lookup.h b/chrome/third_party/xdg_user_dirs/xdg_user_dir_lookup.h deleted file mode 100644 index 9e81e1b..0000000 --- a/chrome/third_party/xdg_user_dirs/xdg_user_dir_lookup.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - This file is not licenced under the GPL like the rest of the code. - Its is under the MIT license, to encourage reuse by cut-and-paste. - - Copyright (c) 2007 Red Hat, inc - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#ifndef CHROME_THIRD_PARTY_XDG_USER_DIRS_XDG_USER_DIR_LOOKUP_H_ -#define CHROME_THIRD_PARTY_XDG_USER_DIRS_XDG_USER_DIR_LOOKUP_H_ - -char* xdg_user_dir_lookup(const char *type); - -#endif // CHROME_THIRD_PARTY_XDG_USER_DIRS_XDG_USER_DIR_LOOKUP_H_ |