| Index: chrome/browser/profile.cc
|
| diff --git a/chrome/browser/profile.cc b/chrome/browser/profile.cc
|
| index 10cb6a1defee24262dfb9cb7d306bb8ef45f0b5f..c3eea76ef2c0b1e2d22f3d07b8a13a5f0ab9df36 100644
|
| --- a/chrome/browser/profile.cc
|
| +++ b/chrome/browser/profile.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/command_line.h"
|
| #include "base/file_path.h"
|
| +#include "base/file_util.h"
|
| #include "base/path_service.h"
|
| #include "base/scoped_ptr.h"
|
| #include "base/string_util.h"
|
| @@ -104,6 +105,19 @@ void GetCacheParameters(ContextType type, FilePath* cache_path,
|
| }
|
| }
|
|
|
| +FilePath GetCachePath(const FilePath& base) {
|
| + return base.Append(chrome::kCacheDirname);
|
| +}
|
| +
|
| +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));
|
| +}
|
| +
|
| } // namespace
|
|
|
| // A pointer to the request context for the default profile. See comments on
|
| @@ -585,8 +599,28 @@ ProfileImpl::ProfileImpl(const FilePath& path)
|
| blacklist_ = new Blacklist(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.
|
| + // TODO(akalin): Use for Linux, too?
|
| + if (!HasACacheSubdir(path_)) {
|
| + FilePath app_data_path, user_cache_path;
|
| + if (PathService::Get(base::DIR_APP_DATA, &app_data_path) &&
|
| + PathService::Get(base::DIR_CACHE, &user_cache_path) &&
|
| + app_data_path.AppendRelativePath(path_, &user_cache_path)) {
|
| + base_cache_path_ = user_cache_path;
|
| + }
|
| + }
|
| +#else
|
| if (!PathService::IsOverridden(chrome::DIR_USER_DATA))
|
| PathService::Get(chrome::DIR_USER_CACHE, &base_cache_path_);
|
| +#endif
|
| if (base_cache_path_.empty())
|
| base_cache_path_ = path_;
|
|
|
| @@ -890,7 +924,7 @@ URLRequestContext* ProfileImpl::GetRequestContext() {
|
| int max_size;
|
| GetCacheParameters(kNormalContext, &cache_path, &max_size);
|
|
|
| - cache_path = cache_path.Append(chrome::kCacheDirname);
|
| + cache_path = GetCachePath(cache_path);
|
| request_context_ = ChromeURLRequestContext::CreateOriginal(
|
| this, cookie_path, cache_path, max_size);
|
| request_context_->AddRef();
|
| @@ -921,7 +955,7 @@ URLRequestContext* ProfileImpl::GetRequestContextForMedia() {
|
| int max_size;
|
| GetCacheParameters(kMediaContext, &cache_path, &max_size);
|
|
|
| - cache_path = cache_path.Append(chrome::kMediaCacheDirname);
|
| + cache_path = GetMediaCachePath(cache_path);
|
| media_request_context_ = ChromeURLRequestContext::CreateOriginalForMedia(
|
| this, cache_path, max_size);
|
| media_request_context_->AddRef();
|
|
|