Index: chrome/installer/setup/install.cc |
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc |
index 2bb42f1eec62517c9f5552028d0e9ae291d37645..f6d9fd37f3ad22428b5ab475ac73379b6c15c597 100644 |
--- a/chrome/installer/setup/install.cc |
+++ b/chrome/installer/setup/install.cc |
@@ -11,11 +11,13 @@ |
#include <memory> |
#include <string> |
+#include "base/base_paths.h" |
#include "base/command_line.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/path_service.h" |
#include "base/process/launch.h" |
#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
@@ -29,6 +31,7 @@ |
#include "chrome/installer/setup/setup_constants.h" |
#include "chrome/installer/setup/setup_util.h" |
#include "chrome/installer/setup/update_active_setup_version_work_item.h" |
+#include "chrome/installer/setup/user_experiment.h" |
#include "chrome/installer/util/beacons.h" |
#include "chrome/installer/util/browser_distribution.h" |
#include "chrome/installer/util/create_reg_key_work_item.h" |
@@ -664,14 +667,14 @@ void HandleOsUpgradeForBrowser(const installer::InstallerState& installer_state, |
// be increased for Active Setup to invoke this again for all users of this |
// install. It may also be invoked again when a system-level chrome install goes |
// through an OS upgrade. |
-void HandleActiveSetupForBrowser(const base::FilePath& installation_root, |
- const installer::Product& chrome, |
+void HandleActiveSetupForBrowser(const InstallerState& installer_state, |
bool force) { |
std::unique_ptr<WorkItemList> cleanup_list(WorkItem::CreateWorkItemList()); |
cleanup_list->set_log_message("Cleanup deprecated per-user registrations"); |
cleanup_list->set_rollback_enabled(false); |
cleanup_list->set_best_effort(true); |
- AddCleanupDeprecatedPerUserRegistrationsWorkItems(chrome, cleanup_list.get()); |
+ AddCleanupDeprecatedPerUserRegistrationsWorkItems(installer_state.product(), |
+ cleanup_list.get()); |
cleanup_list->Do(); |
// Only create shortcuts on Active Setup if the first run sentinel is not |
@@ -686,13 +689,28 @@ void HandleActiveSetupForBrowser(const base::FilePath& installation_root, |
? INSTALL_SHORTCUT_REPLACE_EXISTING |
: INSTALL_SHORTCUT_CREATE_EACH_IF_NO_SYSTEM_LEVEL; |
- // Read master_preferences copied beside chrome.exe at install. |
+ // Read master_preferences copied beside chrome.exe at install for the sake of |
+ // creating/updating shortcuts. |
+ const base::FilePath installation_root = installer_state.target_path(); |
MasterPreferences prefs(installation_root.AppendASCII(kDefaultMasterPrefs)); |
base::FilePath chrome_exe(installation_root.Append(kChromeExe)); |
- CreateOrUpdateShortcuts( |
- chrome_exe, chrome, prefs, CURRENT_USER, install_operation); |
+ CreateOrUpdateShortcuts(chrome_exe, installer_state.product(), prefs, |
+ CURRENT_USER, install_operation); |
UpdateDefaultBrowserBeaconForPath(chrome_exe); |
+ |
+ // This install may have been selected into a study for a retention |
+ // experiment following a successful update. In case the experiment was not |
+ // able to run immediately after the update (e.g., no user was logged on at |
+ // the time), try to run it now that the installer is running in the context |
+ // of a user. |
+ if (ShouldRunUserExperiment(installer_state)) { |
+ base::FilePath setup_exe; |
+ if (!base::PathService::Get(base::FILE_EXE, &setup_exe)) |
+ LOG(ERROR) << "Failed to get path to setup.exe."; |
+ else |
+ BeginUserExperiment(installer_state, setup_exe, true /* user_context */); |
+ } |
} |
} // namespace installer |