Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1603)

Unified Diff: chrome/installer/setup/install.cc

Issue 2333853002: Support --delete-old-versions in setup.exe. (Closed)
Patch Set: CR grt/rkaplow #8-9 Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/installer/setup/install.h ('k') | chrome/installer/setup/setup_main.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/setup/install.cc
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc
index 588550c6a3e31f03b55764a8ba2db6a962ff5409..7ff8815b8c0ccbbce4e9f714ac64efeff68ea0c4 100644
--- a/chrome/installer/setup/install.cc
+++ b/chrome/installer/setup/install.cc
@@ -11,11 +11,13 @@
#include <memory>
#include <string>
+#include "base/command_line.h"
#include "base/files/file_enumerator.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/numerics/safe_conversions.h"
+#include "base/process/launch.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
@@ -680,15 +682,59 @@ InstallStatus InstallOrUpdateProduct(
}
}
+ // Delete files that belong to old versions of Chrome. If that fails during
+ // a not-in-use update, launch a --delete-old-version process. If this is an
+ // in-use update, a --delete-old-versions process will be launched when
+ // executables are renamed.
installer_state.SetStage(REMOVING_OLD_VERSIONS);
- // TODO(fdoray): Launch a cleanup process when this fails during a not-in-
- // use update. crbug.com/451546
- DeleteOldVersions(installer_state.target_path());
+ const bool is_in_use =
+ (result == IN_USE_UPDATED || result == IN_USE_DOWNGRADE);
+ if (!DeleteOldVersions(installer_state.target_path()) && !is_in_use) {
+ const base::FilePath new_version_setup_path =
+ installer_state.GetInstallerDirectory(new_version)
+ .Append(setup_path.BaseName());
+ LaunchDeleteOldVersionsProcess(new_version_setup_path, installer_state);
+ }
}
return result;
}
+void LaunchDeleteOldVersionsProcess(const base::FilePath& setup_path,
+ const InstallerState& installer_state) {
+ // Deleting old versions is relevant if multi-install binaries are being
+ // updated or if single-install Chrome is.
+ const Product* product =
+ installer_state.FindProduct(BrowserDistribution::CHROME_BINARIES);
+ if (!product)
+ product = installer_state.FindProduct(BrowserDistribution::CHROME_BROWSER);
+ if (!product)
+ return;
+
+ base::CommandLine command_line(setup_path);
+ product->AppendProductFlags(&command_line);
+ command_line.AppendSwitch(switches::kDeleteOldVersions);
+
+ if (installer_state.system_install())
+ command_line.AppendSwitch(switches::kSystemLevel);
+ // Unconditionally enable verbose logging for now to make diagnosing potential
+ // failures possible.
+ command_line.AppendSwitch(switches::kVerboseLogging);
+
+ base::LaunchOptions launch_options;
+ launch_options.start_hidden = true;
+ // Make sure not to launch from a version directory. Otherwise, it wouldn't be
+ // possible to delete it.
+ launch_options.current_directory = setup_path.DirName();
+ launch_options.force_breakaway_from_job_ = true;
+
+ VLOG(1) << "Launching \"" << command_line.GetCommandLineString()
+ << "\" to delete old versions.";
+ base::Process process = base::LaunchProcess(command_line, launch_options);
+ PLOG_IF(ERROR, !process.IsValid())
+ << "Failed to launch \"" << command_line.GetCommandLineString() << "\"";
+}
+
void HandleOsUpgradeForBrowser(const installer::InstallerState& installer_state,
const installer::Product& chrome,
const base::Version& installed_version) {
« no previous file with comments | « chrome/installer/setup/install.h ('k') | chrome/installer/setup/setup_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698