| Index: chrome/browser/profile_impl.cc | 
| =================================================================== | 
| --- chrome/browser/profile_impl.cc	(revision 67200) | 
| +++ chrome/browser/profile_impl.cc	(working copy) | 
| @@ -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 @@ | 
| 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 @@ | 
| // 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, | 
|  | 
| Property changes on: chrome/browser/profile_impl.cc | 
| ___________________________________________________________________ | 
| Added: svn:mergeinfo | 
|  | 
|  |