| Index: chrome/browser/process_singleton_linux.cc
|
| diff --git a/chrome/browser/process_singleton_linux.cc b/chrome/browser/process_singleton_linux.cc
|
| index fbba09f54c956c619b78ceb2838f40628a09f5ac..c964c23ce57563abb4469559491d3800428e1d04 100644
|
| --- a/chrome/browser/process_singleton_linux.cc
|
| +++ b/chrome/browser/process_singleton_linux.cc
|
| @@ -294,23 +294,28 @@ bool ParseLockPath(const base::FilePath& path,
|
| return true;
|
| }
|
|
|
| -void DisplayProfileInUseError(const std::string& lock_path,
|
| +// Returns true if the user opted to unlock the profile.
|
| +bool DisplayProfileInUseError(const base::FilePath& lock_path,
|
| const std::string& hostname,
|
| int pid) {
|
| string16 error = l10n_util::GetStringFUTF16(
|
| IDS_PROFILE_IN_USE_LINUX,
|
| base::IntToString16(pid),
|
| ASCIIToUTF16(hostname),
|
| - WideToUTF16(base::SysNativeMBToWide(lock_path)),
|
| l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
|
| + string16 relaunch_button_text = l10n_util::GetStringFUTF16(
|
| + IDS_PROFILE_IN_USE_LINUX_RELAUNCH,
|
| + string16());
|
| LOG(ERROR) << base::SysWideToNativeMB(UTF16ToWide(error)).c_str();
|
| if (!g_disable_prompt) {
|
| #if defined(TOOLKIT_GTK)
|
| - ProcessSingletonDialog::ShowAndRun(UTF16ToUTF8(error));
|
| + return ProcessSingletonDialog::ShowAndRun(
|
| + UTF16ToUTF8(error), UTF16ToUTF8(relaunch_button_text));
|
| #else
|
| NOTIMPLEMENTED();
|
| #endif
|
| }
|
| + return false;
|
| }
|
|
|
| bool IsChromeProcess(pid_t pid) {
|
| @@ -734,9 +739,13 @@ ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcessWithTimeout(
|
| return PROCESS_NONE;
|
| }
|
|
|
| - if (hostname != net::GetHostName()) {
|
| - // Locked by process on another host.
|
| - DisplayProfileInUseError(lock_path_.value(), hostname, pid);
|
| + if (hostname != net::GetHostName() && !IsChromeProcess(pid)) {
|
| + // Locked by process on another host. If the user selected to unlock
|
| + // the profile, try to continue; otherwise quit.
|
| + if (DisplayProfileInUseError(lock_path_, hostname, pid)) {
|
| + UnlinkPath(lock_path_);
|
| + return PROCESS_NONE;
|
| + }
|
| return PROFILE_IN_USE;
|
| }
|
|
|
| @@ -958,8 +967,7 @@ bool ProcessSingleton::KillProcessByLockPath() {
|
| ParseLockPath(lock_path_, &hostname, &pid);
|
|
|
| if (!hostname.empty() && hostname != net::GetHostName()) {
|
| - DisplayProfileInUseError(lock_path_.value(), hostname, pid);
|
| - return false;
|
| + return DisplayProfileInUseError(lock_path_, hostname, pid);
|
| }
|
| UnlinkPath(lock_path_);
|
|
|
|
|