Index: chrome/common/logging_chrome.cc |
diff --git a/chrome/common/logging_chrome.cc b/chrome/common/logging_chrome.cc |
index 6106e43d7d25186bacae317ba72373b03241fdec..48bcc37a973e9519efd36feecb87b0b5e809ba8d 100644 |
--- a/chrome/common/logging_chrome.cc |
+++ b/chrome/common/logging_chrome.cc |
@@ -158,12 +158,13 @@ FilePath SetUpSymlinkIfNeeded(const FilePath& symlink_path, bool new_log) { |
// starting a new log, then delete the old symlink and make a new |
// one to a fresh log file. |
FilePath target_path; |
- if (new_log || !file_util::PathExists(symlink_path)) { |
+ bool symlink_exists = file_util::PathExists(symlink_path); |
+ if (new_log || !symlink_exists) { |
target_path = GenerateTimestampedName(symlink_path, base::Time::Now()); |
// We don't care if the unlink fails; we're going to continue anyway. |
if (unlink(symlink_path.value().c_str()) == -1) { |
- if (new_log) // only warn if we might expect it to succeed. |
+ if (symlink_exists) // only warn if we might expect it to succeed. |
PLOG(WARNING) << "Unable to unlink " << symlink_path.value(); |
} |
if (symlink(target_path.value().c_str(), |
@@ -193,12 +194,29 @@ void RemoveSymlinkAndLog(const FilePath& link_path, |
} // anonymous namespace |
-void RedirectChromeLogging(const FilePath& new_log_dir, |
- const CommandLine& command_line) { |
+FilePath GetSessionLogFile(const CommandLine& command_line) { |
+ FilePath log_dir; |
+ std::string log_dir_str; |
+ scoped_ptr<base::Environment> env(base::Environment::Create()); |
+ if (env->GetVar(env_vars::kSessionLogDir, &log_dir_str) && |
+ !log_dir_str.empty()) { |
+ log_dir = FilePath(log_dir_str); |
+ } else { |
+ PathService::Get(chrome::DIR_USER_DATA, &log_dir); |
+ FilePath login_profile = |
+ command_line.GetSwitchValuePath(switches::kLoginProfile); |
+ log_dir = log_dir.Append(login_profile); |
+ } |
+ return log_dir.Append(GetLogFileName().BaseName()); |
+} |
+ |
+void RedirectChromeLogging(const CommandLine& command_line) { |
DCHECK(!chrome_logging_redirected_) << |
"Attempted to redirect logging when it was already initialized."; |
- FilePath orig_log_path = GetLogFileName(); |
- FilePath log_path = new_log_dir.Append(orig_log_path.BaseName()); |
+ |
+ // Redirect logs to the session log directory, if set. Otherwise |
+ // defaults to the profile dir. |
+ FilePath log_path = GetSessionLogFile(command_line); |
// Always force a new symlink when redirecting. |
FilePath target_path = SetUpSymlinkIfNeeded(log_path, true); |
@@ -215,6 +233,8 @@ void RedirectChromeLogging(const FilePath& new_log_dir, |
chrome_logging_redirected_ = true; |
} |
} |
+ |
+ |
#endif |
void InitChromeLogging(const CommandLine& command_line, |
@@ -229,6 +249,12 @@ void InitChromeLogging(const CommandLine& command_line, |
FilePath log_path = GetLogFileName(); |
#if defined(OS_CHROMEOS) |
+ // For BWSI (Incognito) logins, we want to put the logs in the user |
+ // profile directory that is created for the temporary session instead |
+ // of in the system log directory, for privacy reasons. |
+ if (command_line.HasSwitch(switches::kGuestSession)) |
+ log_path = GetSessionLogFile(command_line); |
+ |
// On ChromeOS we log to the symlink. We force creation of a new |
// symlink if we've been asked to delete the old log, since that |
// indicates the start of a new session. |