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

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

Issue 10665002: Implement installation of the Chrome App Host. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: A basic working app host installer/uninstaller. Created 8 years, 5 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
Index: chrome/installer/setup/setup_main.cc
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc
index 2010e4c18eb5f62a59f25e7fd3dc942d595f2b1a..1573cea2ae55a9c5c44e0ac7135a16c0bb975556 100644
--- a/chrome/installer/setup/setup_main.cc
+++ b/chrome/installer/setup/setup_main.cc
@@ -356,6 +356,8 @@ bool CheckMultiInstallConditions(const InstallationState& original_state,
if (installer_state->is_multi_install()) {
const Product* chrome =
installer_state->FindProduct(BrowserDistribution::CHROME_BROWSER);
+ const Product* binaries =
+ installer_state->FindProduct(BrowserDistribution::CHROME_BINARIES);
const Product* chrome_frame =
installer_state->FindProduct(BrowserDistribution::CHROME_FRAME);
const ProductState* cf_state =
@@ -384,8 +386,8 @@ bool CheckMultiInstallConditions(const InstallationState& original_state,
VLOG(1) << "Performing initial install of Chrome Frame ready-mode.";
}
}
- } else if (chrome_frame != NULL) {
- // We're being asked to install or update Chrome Frame alone.
+ } else if (binaries != NULL) {
+ // We're being asked to install or update the binaries without Chrome.
const ProductState* chrome_state =
original_state.GetProductState(system_level,
BrowserDistribution::CHROME_BROWSER);
@@ -397,9 +399,8 @@ bool CheckMultiInstallConditions(const InstallationState& original_state,
BrowserDistribution::CHROME_BROWSER)));
multi_chrome->SetOption(installer::kOptionMultiInstall, true);
chrome = installer_state->AddProduct(&multi_chrome);
- VLOG(1) << "Upgrading existing multi-install Chrome browser along with "
- << chrome_frame->distribution()->GetAppShortCutName();
- } else if (chrome_frame->HasOption(installer::kOptionReadyMode)) {
+ VLOG(1) << "Upgrading existing Chrome browser in multi-install mode.";
+ } else if (chrome_frame && chrome_frame->HasOption(installer::kOptionReadyMode)) {
grt (UTC plus 2) 2012/07/12 18:37:10 80 cols
erikwright (departed) 2012/07/16 20:13:11 Done.
// Chrome Frame with ready-mode is to be installed, yet Chrome is
// neither installed nor being installed. Fail.
LOG(ERROR) << "Cannot install Chrome Frame in ready mode without "
@@ -434,6 +435,53 @@ bool CheckMultiInstallConditions(const InstallationState& original_state,
return true;
}
+bool CheckAppHostPreconditions(const InstallationState& original_state,
grt (UTC plus 2) 2012/07/12 18:37:10 please document the failure modes and side effects
erikwright (departed) 2012/07/16 20:13:11 The logic you refer to moved to InstallerState.
+ InstallerState* installer_state) {
+ if (!installer_state->FindProduct(BrowserDistribution::CHROME_APP_HOST))
+ return true;
+
+ if (installer_state->level() == InstallerState::SYSTEM_LEVEL)
+ return false;
grt (UTC plus 2) 2012/07/12 18:37:10 VLOG(1) the reason for failure
erikwright (departed) 2012/07/16 20:13:11 Done.
+
grt (UTC plus 2) 2012/07/12 18:37:10 if (instaler_state->package_type() != InstallerSta
erikwright (departed) 2012/07/16 20:13:11 Done.
+ const ProductState* chrome_state = original_state.GetProductState(
+ true /* system level */, BrowserDistribution::CHROME_BROWSER);
tommi (sloooow) - chröme 2012/07/12 08:11:31 nit: I think we avoid /**/ comments in general. in
grt (UTC plus 2) 2012/07/12 18:37:10 InstallerState::Level could be moved up into the "
erikwright (departed) 2012/07/16 20:13:11 Done.
erikwright (departed) 2012/07/16 20:13:11 Not done for this CL.
+ if (chrome_state) {
+ // Chrome is at system-level, multi- or otherwise. We'll use it.
+ return true;
+ }
+
+ const ProductState* binaries_state = original_state.GetProductState(
+ false /* system level */, BrowserDistribution::CHROME_BINARIES);
grt (UTC plus 2) 2012/07/12 18:37:10 should the comment be "!system level"? i find it
erikwright (departed) 2012/07/16 20:13:11 This particular instance is gone.
+ if (!binaries_state) {
+ binaries_state = original_state.GetProductState(
+ true /* system level */, BrowserDistribution::CHROME_BINARIES);
+ }
+
+ if (binaries_state) {
+ // Binaries are installed somewhere. We'll use 'em.
+ return true;
+ }
+
+ if (!binaries_state && ! installer_state->is_multi_install()) {
grt (UTC plus 2) 2012/07/12 18:37:10 remove this block as discussed
erikwright (departed) 2012/07/16 20:13:11 Done.
+ // Can't install binaries because this isn't a multi install.
+ return false;
+ }
+
+ if (!installer_state->FindProduct(BrowserDistribution::CHROME_BINARIES)) {
+ // Force binaries to be installed.
+ scoped_ptr<Product> binaries_product(new Product(
+ BrowserDistribution::GetSpecificDistribution(
+ BrowserDistribution::CHROME_BINARIES)));
+ binaries_product->SetOption(installer::kOptionMultiInstall, true);
+ if (!installer_state->AddProduct(&binaries_product)) {
+ // Can't install binaries for some reason.
+ return false;
+ }
+ }
+
+ return true;
+}
+
// Checks for compatibility between the current state of the system and the
// desired operation. Also applies policy that mutates the desired operation;
// specifically, the |installer_state| object.
@@ -446,6 +494,9 @@ bool CheckMultiInstallConditions(const InstallationState& original_state,
bool CheckPreInstallConditions(const InstallationState& original_state,
InstallerState* installer_state,
installer::InstallStatus* status) {
+ if (!CheckAppHostPreconditions(original_state, installer_state))
+ return false;
+
// See what products are already installed in multi mode. When we do multi
// installs, we must upgrade all installations since they share the binaries.
AddExistingMultiInstalls(original_state, installer_state);
@@ -624,22 +675,28 @@ installer::InstallStatus InstallProductsHelper(
}
if (higher_products != 0) {
- COMPILE_ASSERT(BrowserDistribution::NUM_TYPES == 3,
+ COMPILE_ASSERT(BrowserDistribution::NUM_TYPES == 4,
add_support_for_new_products_here_);
const uint32 kBrowserBit = 1 << BrowserDistribution::CHROME_BROWSER;
const uint32 kGCFBit = 1 << BrowserDistribution::CHROME_FRAME;
+ const uint32 kAppHostBit = 1 << BrowserDistribution::CHROME_APP_HOST;
int message_id = 0;
proceed_with_installation = false;
install_status = installer::HIGHER_VERSION_EXISTS;
- if ((higher_products & kBrowserBit) != 0) {
- if ((higher_products & kGCFBit) != 0)
- message_id = IDS_INSTALL_HIGHER_VERSION_CB_CF_BASE;
- else
+ switch (higher_products) {
+ case kBrowserBit:
message_id = IDS_INSTALL_HIGHER_VERSION_BASE;
- } else {
- DCHECK(higher_products == kGCFBit);
- message_id = IDS_INSTALL_HIGHER_VERSION_CF_BASE;
+ break;
+ case kGCFBit:
+ message_id = IDS_INSTALL_HIGHER_VERSION_CF_BASE;
+ break;
+ case kGCFBit & kBrowserBit:
grt (UTC plus 2) 2012/07/12 18:37:10 i think you mean "kGCFBit | kBrowserBit" here.
erikwright (departed) 2012/07/16 20:13:11 Done.
+ message_id = IDS_INSTALL_HIGHER_VERSION_CB_CF_BASE;
+ break;
+ default:
+ message_id = IDS_INSTALL_HIGHER_VERSION_APP_HOST_BASE;
+ break;
}
installer_state.WriteInstallerResult(install_status, message_id, NULL);
@@ -883,7 +940,7 @@ installer::InstallStatus UninstallProducts(
// here for this reason: if Chrome is in-use, the user will be prompted to
// confirm uninstallation. Upon cancel, we should not continue with the
// other products.
- DCHECK(products.size() < 2 || products[0]->is_chrome());
+ // TODO(erikwright): if product 0 is not chrome, assert chrome not in products
tommi (sloooow) - chröme 2012/07/12 08:11:31 do you intend to do that before checkin?
erikwright (departed) 2012/07/16 20:13:11 Done.
installer::InstallStatus install_status = installer::UNINSTALL_SUCCESSFUL;
installer::InstallStatus prod_status = installer::UNKNOWN_STATUS;
const bool force = cmd_line.HasSwitch(installer::switches::kForceUninstall);

Powered by Google App Engine
This is Rietveld 408576698