| Index: chrome/installer/util/installer_state.cc
|
| diff --git a/chrome/installer/util/installer_state.cc b/chrome/installer/util/installer_state.cc
|
| index 00906292c31514cf2d4333150d52fb9b5383555d..93d69622cb10f57e952e5a6a62763cf4c3084353 100644
|
| --- a/chrome/installer/util/installer_state.cc
|
| +++ b/chrome/installer/util/installer_state.cc
|
| @@ -24,6 +24,7 @@
|
| #include "chrome/installer/util/master_preferences.h"
|
| #include "chrome/installer/util/master_preferences_constants.h"
|
| #include "chrome/installer/util/product.h"
|
| +#include "chrome/installer/util/util_constants.h"
|
| #include "chrome/installer/util/work_item.h"
|
| #include "chrome/installer/util/work_item_list.h"
|
|
|
| @@ -78,7 +79,9 @@ InstallerState::InstallerState()
|
| root_key_(NULL),
|
| msi_(false),
|
| verbose_logging_(false),
|
| - ensure_google_update_present_(false) {
|
| + ensure_google_update_present_(false),
|
| + need_to_migrate_legacy_app_launcher_(false),
|
| + create_app_launcher_shortcuts_(false) {
|
| }
|
|
|
| InstallerState::InstallerState(Level level)
|
| @@ -90,7 +93,9 @@ InstallerState::InstallerState(Level level)
|
| root_key_(NULL),
|
| msi_(false),
|
| verbose_logging_(false),
|
| - ensure_google_update_present_(false) {
|
| + ensure_google_update_present_(false),
|
| + need_to_migrate_legacy_app_launcher_(false),
|
| + create_app_launcher_shortcuts_(false) {
|
| // Use set_level() so that root_key_ is updated properly.
|
| set_level(level);
|
| }
|
| @@ -118,12 +123,37 @@ void InstallerState::Initialize(const CommandLine& command_line,
|
|
|
| const bool is_uninstall = command_line.HasSwitch(switches::kUninstall);
|
|
|
| - if (prefs.install_chrome()) {
|
| - Product* p = AddProductFromPreferences(
|
| + // TODO(huangs): Remove by M30.
|
| + if (!is_uninstall && !system_install() && prefs.is_multi_install()) {
|
| + // Check the version of App Launcher ClientState to determine if legacy.
|
| + const ProductState* app_launcher_state = machine_state.GetProductState(
|
| + false, BrowserDistribution::CHROME_APP_HOST);
|
| + if (app_launcher_state) {
|
| + need_to_migrate_legacy_app_launcher_ =
|
| + app_launcher_state->version().IsOlderThan("29.0.1508.0");
|
| + }
|
| + }
|
| +
|
| + // App Launcher and Chrome are unified.
|
| + if (prefs.install_chrome() || prefs.install_chrome_app_launcher() ||
|
| + need_to_migrate_legacy_app_launcher_) {
|
| + Product* p1 = AddProductFromPreferences(
|
| BrowserDistribution::CHROME_BROWSER, prefs, machine_state);
|
| VLOG(1) << (is_uninstall ? "Uninstall" : "Install")
|
| - << " distribution: " << p->distribution()->GetAppShortCutName();
|
| + << " distribution: " << p1->distribution()->GetAppShortCutName();
|
| +
|
| + if (is_multi_install()) {
|
| + Product* p2 = AddProductFromPreferences(
|
| + BrowserDistribution::CHROME_APP_HOST, prefs, machine_state);
|
| + VLOG(1) << (is_uninstall ? "Uninstall" : "Install")
|
| + << " distribution: " << p2->distribution()->GetAppShortCutName();
|
| + }
|
| }
|
| + // TODO(huangs): Remove by M30.
|
| + // Create App Launcher shortcuts if --app-launcher is specified.
|
| + create_app_launcher_shortcuts_ = need_to_migrate_legacy_app_launcher_ ||
|
| + prefs.install_chrome_app_launcher();
|
| +
|
| if (prefs.install_chrome_frame()) {
|
| Product* p = AddProductFromPreferences(
|
| BrowserDistribution::CHROME_FRAME, prefs, machine_state);
|
| @@ -131,45 +161,16 @@ void InstallerState::Initialize(const CommandLine& command_line,
|
| << " distribution: " << p->distribution()->GetAppShortCutName();
|
| }
|
|
|
| - if (prefs.install_chrome_app_launcher()) {
|
| + if (!is_uninstall && is_multi_install() &&
|
| + !FindProduct(BrowserDistribution::CHROME_BINARIES) &&
|
| + (FindProduct(BrowserDistribution::CHROME_BROWSER) ||
|
| + FindProduct(BrowserDistribution::CHROME_FRAME) ||
|
| + FindProduct(BrowserDistribution::CHROME_APP_HOST))) {
|
| + // Force binaries to be installed/updated.
|
| Product* p = AddProductFromPreferences(
|
| - BrowserDistribution::CHROME_APP_HOST, prefs, machine_state);
|
| - VLOG(1) << (is_uninstall ? "Uninstall" : "Install")
|
| - << " distribution: " << p->distribution()->GetAppShortCutName();
|
| - }
|
| -
|
| - if (!is_uninstall && is_multi_install()) {
|
| - bool need_binaries = false;
|
| - if (FindProduct(BrowserDistribution::CHROME_APP_HOST)) {
|
| - // App Host will happily use Chrome at system level, or binaries at system
|
| - // level, even if app host is user level.
|
| - const ProductState* chrome_state = machine_state.GetProductState(
|
| - true, // system level
|
| - BrowserDistribution::CHROME_BROWSER);
|
| - // If Chrome is at system-level, multi- or otherwise. We'll use it.
|
| - if (!chrome_state) {
|
| - const ProductState* binaries_state = machine_state.GetProductState(
|
| - true, // system level
|
| - BrowserDistribution::CHROME_BINARIES);
|
| - if (!binaries_state)
|
| - need_binaries = true;
|
| - }
|
| - }
|
| -
|
| - // Chrome/Chrome Frame multi need Binaries at their own level.
|
| - if (FindProduct(BrowserDistribution::CHROME_BROWSER))
|
| - need_binaries = true;
|
| -
|
| - if (FindProduct(BrowserDistribution::CHROME_FRAME))
|
| - need_binaries = true;
|
| -
|
| - if (need_binaries && !FindProduct(BrowserDistribution::CHROME_BINARIES)) {
|
| - // Force binaries to be installed/updated.
|
| - Product* p = AddProductFromPreferences(
|
| - BrowserDistribution::CHROME_BINARIES, prefs, machine_state);
|
| - VLOG(1) << "Install distribution: "
|
| - << p->distribution()->GetAppShortCutName();
|
| - }
|
| + BrowserDistribution::CHROME_BINARIES, prefs, machine_state);
|
| + VLOG(1) << "Install distribution: "
|
| + << p->distribution()->GetAppShortCutName();
|
| }
|
|
|
| if (is_uninstall && prefs.is_multi_install()) {
|
|
|