Index: chrome/installer/setup/setup_main.cc |
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc |
index 3799bf282ad8de2d7a22a97ad218b620805d713c..a7fcfaea4f3bb1dd064f80010593d4a202218b7b 100644 |
--- a/chrome/installer/setup/setup_main.cc |
+++ b/chrome/installer/setup/setup_main.cc |
@@ -45,12 +45,14 @@ |
#include "chrome/common/chrome_constants.h" |
#include "chrome/common/chrome_paths.h" |
#include "chrome/common/chrome_switches.h" |
+#include "chrome/install_static/install_details.h" |
#include "chrome/installer/setup/archive_patch_helper.h" |
#include "chrome/installer/setup/install.h" |
#include "chrome/installer/setup/install_worker.h" |
#include "chrome/installer/setup/installer_crash_reporting.h" |
#include "chrome/installer/setup/persistent_histogram_storage.h" |
#include "chrome/installer/setup/setup_constants.h" |
+#include "chrome/installer/setup/setup_install_details.h" |
#include "chrome/installer/setup/setup_singleton.h" |
#include "chrome/installer/setup/setup_util.h" |
#include "chrome/installer/setup/uninstall.h" |
@@ -1704,6 +1706,8 @@ int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prev_instance, |
InstallerState installer_state; |
installer_state.Initialize(cmd_line, prefs, original_state); |
+ InitializeInstallDetails(cmd_line, prefs, installer_state); |
+ |
persistent_histogram_storage.set_storage_dir( |
installer::PersistentHistogramStorage::GetReportedStorageDir( |
installer_state.target_path())); |
@@ -1737,18 +1741,22 @@ int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prev_instance, |
return installer::OS_ERROR; |
} |
- // Some command line options don't work with SxS install/uninstall |
- if (InstallUtil::IsChromeSxSProcess()) { |
- if (system_install || |
- prefs.is_multi_install() || |
- cmd_line.HasSwitch(installer::switches::kSelfDestruct) || |
- cmd_line.HasSwitch(installer::switches::kMakeChromeDefault) || |
- cmd_line.HasSwitch(installer::switches::kRegisterChromeBrowser) || |
- cmd_line.HasSwitch(installer::switches::kRemoveChromeRegistration) || |
- cmd_line.HasSwitch(installer::switches::kInactiveUserToast) || |
- cmd_line.HasSwitch(installer::switches::kSystemLevelToast)) { |
- return installer::SXS_OPTION_NOT_SUPPORTED; |
- } |
+ const install_static::InstallDetails& install_details = |
+ install_static::InstallDetails::Get(); |
+ // Make sure multi_install and/or system_level are supported if requested. |
+ if ((prefs.is_multi_install() && !install_details.supports_multi_install()) || |
+ (system_install && !install_details.supports_system_level())) { |
+ return installer::SXS_OPTION_NOT_SUPPORTED; |
+ } |
+ // Some command line options don't work with secondary installs. |
+ if (install_details.install_mode_index() != 0 && |
+ (cmd_line.HasSwitch(installer::switches::kSelfDestruct) || |
+ cmd_line.HasSwitch(installer::switches::kMakeChromeDefault) || |
+ cmd_line.HasSwitch(installer::switches::kRegisterChromeBrowser) || |
+ cmd_line.HasSwitch(installer::switches::kRemoveChromeRegistration) || |
+ cmd_line.HasSwitch(installer::switches::kInactiveUserToast) || |
+ cmd_line.HasSwitch(installer::switches::kSystemLevelToast))) { |
+ return installer::SXS_OPTION_NOT_SUPPORTED; |
} |
// Some command line options are no longer supported and must error out. |