summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/base_paths.h9
-rw-r--r--base/base_paths_linux.cc2
-rw-r--r--base/base_paths_mac.mm2
-rw-r--r--base/path_service.cc8
-rw-r--r--base/path_service.h5
-rw-r--r--base/path_service_unittest.cc4
-rw-r--r--chrome/browser/profile_impl.cc51
-rw-r--r--chrome/chrome_tests.gypi1
-rw-r--r--chrome/common/chrome_paths_internal.h9
-rw-r--r--chrome/common/chrome_paths_linux.cc27
-rw-r--r--chrome/common/chrome_paths_mac.mm22
-rw-r--r--chrome/common/chrome_paths_unittest.cc44
-rw-r--r--chrome/common/chrome_paths_win.cc5
13 files changed, 66 insertions, 123 deletions
diff --git a/base/base_paths.h b/base/base_paths.h
index 72cff15..0f9be04 100644
--- a/base/base_paths.h
+++ b/base/base_paths.h
@@ -33,11 +33,10 @@ enum {
// for tests that need to locate various resources. It
// should not be used outside of test code.
#if defined(OS_POSIX)
- DIR_CACHE, // Directory where to put cache data. Note this is
- // *not* where the browser cache lives, but the
- // browser cache can be a subdirectory.
- // This is $XDG_CACHE_HOME on Linux and
- // ~/Library/Caches on Mac.
+ DIR_USER_CACHE, // Directory where user cache data resides. The Chromium
+ // browser cache can be a subdirectory of DIR_USER_CACHE.
+ // This is $XDG_CACHE_HOME on Linux and ~/Library/Caches
+ // on Mac.
#endif
PATH_END
diff --git a/base/base_paths_linux.cc b/base/base_paths_linux.cc
index 701b983..6d837f2 100644
--- a/base/base_paths_linux.cc
+++ b/base/base_paths_linux.cc
@@ -105,7 +105,7 @@ bool PathProviderPosix(int key, FilePath* result) {
<< "Try running from your chromium/src directory.";
return false;
}
- case base::DIR_CACHE:
+ case base::DIR_USER_CACHE:
scoped_ptr<base::Environment> env(base::Environment::Create());
FilePath cache_dir(base::nix::GetXDGDirectory(env.get(), "XDG_CACHE_HOME",
".cache"));
diff --git a/base/base_paths_mac.mm b/base/base_paths_mac.mm
index 97413ba..b9225d8 100644
--- a/base/base_paths_mac.mm
+++ b/base/base_paths_mac.mm
@@ -47,7 +47,7 @@ bool PathProviderMac(int key, FilePath* result) {
case base::FILE_MODULE: {
return GetNSExecutablePath(result);
}
- case base::DIR_CACHE:
+ case base::DIR_USER_CACHE:
return mac_util::GetUserDirectory(NSCachesDirectory, result);
case base::DIR_APP_DATA:
return mac_util::GetUserDirectory(NSApplicationSupportDirectory, result);
diff --git a/base/path_service.cc b/base/path_service.cc
index 8660c42..9eed56d 100644
--- a/base/path_service.cc
+++ b/base/path_service.cc
@@ -215,6 +215,14 @@ bool PathService::Get(int key, std::wstring* result) {
}
#endif
+// TODO(evan): remove me -- see comments in header.
+bool PathService::IsOverridden(int key) {
+ PathData* path_data = GetPathData();
+ DCHECK(path_data);
+ AutoLock scoped_lock(path_data->lock);
+ return path_data->overrides.find(key) != path_data->overrides.end();
+}
+
bool PathService::Override(int key, const FilePath& path) {
PathData* path_data = GetPathData();
DCHECK(path_data);
diff --git a/base/path_service.h b/base/path_service.h
index 4d99cdc..6873e1f 100644
--- a/base/path_service.h
+++ b/base/path_service.h
@@ -45,6 +45,11 @@ class PathService {
// over the lifetime of the app, so this method should be used with caution.
static bool Override(int key, const FilePath& path);
+ // Return whether a path was overridden.
+ // TODO(evan): temporarily restoring this to quick-fix a regression.
+ // Remove me again once it's fixed properly.
+ static bool IsOverridden(int key);
+
// To extend the set of supported keys, you can register a path provider,
// which is just a function mirroring PathService::Get. The ProviderFunc
// returns false if it cannot provide a non-empty path for the given key.
diff --git a/base/path_service_unittest.cc b/base/path_service_unittest.cc
index 26998de..c65f7a5 100644
--- a/base/path_service_unittest.cc
+++ b/base/path_service_unittest.cc
@@ -22,9 +22,9 @@ bool ReturnsValidPath(int dir_type) {
FilePath path;
bool result = PathService::Get(dir_type, &path);
#if defined(OS_POSIX)
- // If chromium has never been started on this account, the cache path may not
+ // If chromium has never been started on this account, the cache path will not
// exist.
- if (dir_type == base::DIR_CACHE)
+ if (dir_type == base::DIR_USER_CACHE)
return result && !path.value().empty();
#endif
return result && !path.value().empty() && file_util::PathExists(path);
diff --git a/chrome/browser/profile_impl.cc b/chrome/browser/profile_impl.cc
index c66428d..464c45c 100644
--- a/chrome/browser/profile_impl.cc
+++ b/chrome/browser/profile_impl.cc
@@ -81,7 +81,6 @@
#include "chrome/browser/webdata/web_data_service.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_paths_internal.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/json_pref_store.h"
#include "chrome/common/notification_service.h"
@@ -173,6 +172,11 @@ FilePath GetMediaCachePath(const FilePath& base) {
return base.Append(chrome::kMediaCacheDirname);
}
+bool HasACacheSubdir(const FilePath &dir) {
+ return file_util::PathExists(GetCachePath(dir)) ||
+ file_util::PathExists(GetMediaCachePath(dir));
+}
+
// Simple task to log the size of the current profile.
class ProfileSizeTask : public Task {
public:
@@ -276,11 +280,46 @@ ProfileImpl::ProfileImpl(const FilePath& path)
// Convert active labs into switches. Modifies the current command line.
about_flags::ConvertFlagsToSwitches(prefs, CommandLine::ForCurrentProcess());
- // It would be nice to use PathService for fetching this directory, but
- // the cache directory depends on the profile directory, which isn't available
- // to PathService.
- chrome::GetUserCacheDirectory(path_, &base_cache_path_);
- file_util::CreateDirectory(base_cache_path_);
+#if defined(OS_MACOSX)
+ // If the profile directory doesn't already have a cache directory and it
+ // is under ~/Library/Application Support, use a suitable cache directory
+ // under ~/Library/Caches. For example, a profile directory of
+ // ~/Library/Application Support/Google/Chrome/MyProfileName that doesn't
+ // have a "Cache" or "MediaCache" subdirectory would use the cache directory
+ // ~/Library/Caches/Google/Chrome/MyProfileName.
+ //
+ // TODO(akalin): Come up with unit tests for this.
+ if (!HasACacheSubdir(path_)) {
+ FilePath app_data_path, user_cache_path;
+ if (PathService::Get(base::DIR_APP_DATA, &app_data_path) &&
+ PathService::Get(base::DIR_USER_CACHE, &user_cache_path) &&
+ app_data_path.AppendRelativePath(path_, &user_cache_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 we're using a different user-data-dir, though, fall through
+ // to the "normal" cache directory (a subdirectory of that).
+ // TODO(evan): all of this logic belongs in path_service; refactor and remove
+ // this IsOverriden business.
+ if (!PathService::IsOverridden(chrome::DIR_USER_DATA)) {
+#if defined(GOOGLE_CHROME_BUILD)
+ const char kCacheDir[] = "google-chrome";
+#else
+ 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_;
// Listen for theme installations from our original profile.
registrar_.Add(this, NotificationType::THEME_INSTALLED,
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 269e07b8..2d9c8b2 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1550,7 +1550,6 @@
'browser/wrench_menu_model_unittest.cc',
'common/bzip2_unittest.cc',
'common/child_process_logging_mac_unittest.mm',
- 'common/chrome_paths_unittest.cc',
'common/common_param_traits_unittest.cc',
'common/content_settings_helper_unittest.cc',
'common/deprecated/event_sys_unittest.cc',
diff --git a/chrome/common/chrome_paths_internal.h b/chrome/common/chrome_paths_internal.h
index dfe927d..6671e25 100644
--- a/chrome/common/chrome_paths_internal.h
+++ b/chrome/common/chrome_paths_internal.h
@@ -21,15 +21,6 @@ bool GetDefaultUserDataDirectory(FilePath* result);
// CF and Google Chrome want to share the same binaries.
bool GetChromeFrameUserDataDirectory(FilePath* result);
-// Get the path to the user's cache directory. This is normally the
-// same as the profile directory, but on Linux it can also be
-// $XDG_CACHE_HOME and on Mac it can be under ~/Library/Caches.
-// Note that the Chrome cache directories are actually subdirectories
-// of this directory, with names like "Cache" and "Media Cache".
-// This will always fill in |result| with a directory, sometimes
-// just |profile_dir|.
-void GetUserCacheDirectory(const FilePath& profile_dir, FilePath* result);
-
// 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 a7fdb07..42c6ae7 100644
--- a/chrome/common/chrome_paths_linux.cc
+++ b/chrome/common/chrome_paths_linux.cc
@@ -6,7 +6,6 @@
#include "base/environment.h"
#include "base/file_util.h"
-#include "base/path_service.h"
#include "base/scoped_ptr.h"
#include "base/nix/xdg_util.h"
@@ -29,32 +28,6 @@ bool GetDefaultUserDataDirectory(FilePath* result) {
return true;
}
-void GetUserCacheDirectory(const FilePath& profile_dir, FilePath* result) {
- // See http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
- // for a spec on where cache files go. Our rule is:
- // - if the user-data-dir in the standard place,
- // use same subdirectory of the cache directory.
- // (this maps ~/.config/google-chrome to ~/.cache/google-chrome as well
- // as the same thing for ~/.config/chromium)
- // - otherwise, use the profile dir directly.
-
- // Default value in cases where any of the following fails.
- *result = profile_dir;
-
- scoped_ptr<base::Environment> env(base::Environment::Create());
-
- FilePath cache_dir;
- if (!PathService::Get(base::DIR_CACHE, &cache_dir))
- return;
- FilePath config_dir(
- base::nix::GetXDGDirectory(env.get(), "XDG_CONFIG_HOME", ".config"));
-
- if (!config_dir.AppendRelativePath(profile_dir, &cache_dir))
- return;
-
- *result = cache_dir;
-}
-
bool GetChromeFrameUserDataDirectory(FilePath* result) {
scoped_ptr<base::Environment> env(base::Environment::Create());
FilePath config_dir(
diff --git a/chrome/common/chrome_paths_mac.mm b/chrome/common/chrome_paths_mac.mm
index 57ed3bd..b87b397 100644
--- a/chrome/common/chrome_paths_mac.mm
+++ b/chrome/common/chrome_paths_mac.mm
@@ -48,28 +48,6 @@ bool GetUserDocumentsDirectory(FilePath* result) {
return mac_util::GetUserDirectory(NSDocumentDirectory, result);
}
-void GetUserCacheDirectory(const FilePath& profile_dir, FilePath* result) {
- // If the profile directory is under ~/Library/Application Support,
- // use a suitable cache directory under ~/Library/Caches. For
- // example, a profile directory of ~/Library/Application
- // Support/Google/Chrome/MyProfileName would use the cache directory
- // ~/Library/Caches/Google/Chrome/MyProfileName.
-
- // Default value in cases where any of the following fails.
- *result = profile_dir;
-
- FilePath app_data_dir;
- if (!PathService::Get(base::DIR_APP_DATA, &app_data_dir))
- return;
- FilePath cache_dir;
- if (!PathService::Get(base::DIR_CACHE, &cache_dir))
- return;
- if (!app_data_dir.AppendRelativePath(profile_dir, &cache_dir))
- return;
-
- *result = cache_dir;
-}
-
bool GetUserDownloadsDirectory(FilePath* result) {
return mac_util::GetUserDirectory(NSDownloadsDirectory, result);
}
diff --git a/chrome/common/chrome_paths_unittest.cc b/chrome/common/chrome_paths_unittest.cc
deleted file mode 100644
index 23bc7d4..0000000
--- a/chrome/common/chrome_paths_unittest.cc
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/common/chrome_paths_internal.h"
-
-#include <stdlib.h>
-
-#include "base/file_path.h"
-#include "base/file_util.h"
-#include "base/path_service.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-// Test the behavior of chrome::GetUserCacheDirectory.
-// See that function's comments for discussion of the subtleties.
-TEST(ChromePaths, UserCacheDir) {
- FilePath test_profile_dir, cache_dir;
-#if defined(OS_MACOSX)
- ASSERT_TRUE(PathService::Get(base::DIR_APP_DATA, &test_profile_dir));
- test_profile_dir = test_profile_dir.Append("foobar");
- FilePath expected_cache_dir;
- ASSERT_TRUE(PathService::Get(base::DIR_CACHE, &expected_cache_dir));
- expected_cache_dir = expected_cache_dir.Append("foobar");
-#elif(OS_POSIX)
- FilePath homedir = file_util::GetHomeDir();
- // Note: we assume XDG_CACHE_HOME/XDG_CONFIG_HOME are at their
- // default settings.
- test_profile_dir = homedir.Append(".config/foobar");
- FilePath expected_cache_dir = homedir.Append(".cache/foobar");
-#endif
-
- // Verify that a profile in the special platform-specific source
- // location ends up in the special target location.
-#if !defined(OS_WIN) // No special behavior on Windows.
- chrome::GetUserCacheDirectory(test_profile_dir, &cache_dir);
- EXPECT_EQ(expected_cache_dir.value(), cache_dir.value());
-#endif
-
- // Verify that a profile in some other random directory doesn't use
- // the special cache dir.
- test_profile_dir = FilePath(FILE_PATH_LITERAL("/some/other/path"));
- chrome::GetUserCacheDirectory(test_profile_dir, &cache_dir);
- EXPECT_EQ(test_profile_dir.value(), cache_dir.value());
-}
diff --git a/chrome/common/chrome_paths_win.cc b/chrome/common/chrome_paths_win.cc
index 74a730d..c9fee0f 100644
--- a/chrome/common/chrome_paths_win.cc
+++ b/chrome/common/chrome_paths_win.cc
@@ -38,11 +38,6 @@ bool GetChromeFrameUserDataDirectory(FilePath* result) {
return true;
}
-void GetUserCacheDirectory(const FilePath& profile_dir, FilePath* result) {
- // This function does more complicated things on Mac/Linux.
- *result = profile_dir;
-}
-
bool GetUserDocumentsDirectory(FilePath* result) {
wchar_t path_buf[MAX_PATH];
if (FAILED(SHGetFolderPath(NULL, CSIDL_MYDOCUMENTS, NULL,