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

Unified Diff: chrome/installer/util/installation_validator.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/util/installation_validator.cc
diff --git a/chrome/installer/util/installation_validator.cc b/chrome/installer/util/installation_validator.cc
index 2d109feb37652783c2ab5414d2dae9af34aae723..5d576029d616d6c8a55e8a44d91de2a4cd8ebfba 100644
--- a/chrome/installer/util/installation_validator.cc
+++ b/chrome/installer/util/installation_validator.cc
@@ -112,6 +112,44 @@ bool InstallationValidator::ChromeFrameRules::UsageStatsAllowed(
}
BrowserDistribution::Type
+ InstallationValidator::ChromeAppHostRules::distribution_type() const {
+ return BrowserDistribution::CHROME_APP_HOST;
+}
+
+void InstallationValidator::ChromeAppHostRules::AddUninstallSwitchExpectations(
+ const InstallationState& machine_state,
+ bool system_install,
+ const ProductState& product_state,
+ SwitchExpectations* expectations) const {
+ DCHECK(!system_install);
+
+ // --chrome-app-host must be present.
+ expectations->push_back(std::make_pair(std::string(switches::kChromeAppHost),
+ true));
+ // --chrome must not be present.
+ expectations->push_back(std::make_pair(std::string(switches::kChrome),
+ false));
+
+ // --chrome-frame must not be present.
+ expectations->push_back(std::make_pair(std::string(switches::kChromeFrame),
+ false));
+}
+
+void InstallationValidator::ChromeAppHostRules::AddRenameSwitchExpectations(
+ const InstallationState& machine_state,
+ bool system_install,
+ const ProductState& product_state,
+ SwitchExpectations* expectations) const {
+ // TODO(erikwright): I guess there will be none?
+}
+
+bool InstallationValidator::ChromeAppHostRules::UsageStatsAllowed(
+ const ProductState& product_state) const {
+ // App Host doesn't manage usage stats. The Chrome Binaries will.
+ return false;
+}
+
+BrowserDistribution::Type
InstallationValidator::ChromeBinariesRules::distribution_type() const {
return BrowserDistribution::CHROME_BINARIES;
}
@@ -149,7 +187,14 @@ const InstallationValidator::InstallationType
CHROME_FRAME_SINGLE_CHROME_MULTI,
CHROME_FRAME_MULTI,
CHROME_FRAME_MULTI_CHROME_MULTI,
- CHROME_FRAME_READY_MODE_CHROME_MULTI
+ CHROME_FRAME_READY_MODE_CHROME_MULTI,
+ CHROME_APP_HOST,
+ CHROME_APP_HOST_CHROME_FRAME_SINGLE,
+ CHROME_APP_HOST_CHROME_FRAME_SINGLE_CHROME_MULTI,
+ CHROME_APP_HOST_CHROME_FRAME_MULTI,
+ CHROME_APP_HOST_CHROME_FRAME_MULTI_CHROME_MULTI,
+ CHROME_APP_HOST_CHROME_MULTI,
+ CHROME_APP_HOST_CHROME_MULTI_CHROME_FRAME_READY_MODE,
};
// Validates the "quick-enable-cf" Google Update product command.
@@ -232,17 +277,17 @@ void InstallationValidator::ValidateBinariesCommands(
bool* is_valid) {
DCHECK(is_valid);
- // The quick-enable-cf command must be present if Chrome is installed either
- // alone or with CF in ready-mode.
+ // The quick-enable-cf command must be present if Chrome Binaries are
+ // installed and Chrome Frame is not installed (or installed in ready mode).
const ChannelInfo& channel = ctx.state.channel();
- const ProductState* chrome_state = ctx.machine_state.GetProductState(
- ctx.system_install, BrowserDistribution::CHROME_BROWSER);
+ const ProductState* binaries_state = ctx.machine_state.GetProductState(
+ ctx.system_install, BrowserDistribution::CHROME_BINARIES);
const ProductState* cf_state = ctx.machine_state.GetProductState(
ctx.system_install, BrowserDistribution::CHROME_FRAME);
CommandExpectations expectations;
- if (chrome_state != NULL && (cf_state == NULL || channel.IsReadyMode()))
+ if (binaries_state != NULL && (cf_state == NULL || channel.IsReadyMode()))
expectations[kCmdQuickEnableCf] = &ValidateQuickEnableCfCommand;
ValidateAppCommandExpectations(ctx, expectations, is_valid);
@@ -310,8 +355,28 @@ void InstallationValidator::ValidateBinaries(
<< "\"";
}
- // Chrome or Chrome Frame must be present
- if (chrome_state == NULL && cf_state == NULL) {
+ // ap must have -apphost iff Chrome Frame is installed multi
+ const ProductState* app_host_state = machine_state.GetProductState(
+ system_install, BrowserDistribution::CHROME_APP_HOST);
+ if (app_host_state != NULL) {
+ if (!app_host_state->is_multi_install()) {
+ *is_valid = false;
+ LOG(ERROR) << "Chrome App Host is installed in non-multi mode.";
+ }
+ if (!channel.IsAppHost()) {
+ *is_valid = false;
+ LOG(ERROR) << "Chrome Binaries are missing \"-apphost\" in channel"
+ " name: \"" << channel.value() << "\"";
+ }
+ } else if (channel.IsAppHost()) {
+ *is_valid = false;
+ LOG(ERROR) << "Chrome Binaries have \"-apphost\" in channel name, yet "
+ "Chrome App Host is not installed: \"" << channel.value()
+ << "\"";
+ }
+
+ // Chrome, Chrome Frame, or App Host must be present
+ if (chrome_state == NULL && cf_state == NULL && app_host_state == NULL) {
*is_valid = false;
LOG(ERROR) << "Chrome Binaries are present with no other products.";
}
@@ -323,12 +388,12 @@ void InstallationValidator::ValidateBinaries(
<< "Chrome Binaries are present yet Chrome is not multi-install.";
}
- // Chrome Frame must be multi-install if Chrome is not present.
- if (cf_state != NULL && chrome_state == NULL &&
+ // Chrome Frame must be multi-install if Chrome & App Host are not present.
+ if (cf_state != NULL && app_host_state == NULL && chrome_state == NULL &&
!cf_state->is_multi_install()) {
*is_valid = false;
- LOG(ERROR) << "Chrome Binaries are present without Chrome yet Chrome Frame "
- "is not multi-install.";
+ LOG(ERROR) << "Chrome Binaries are present without Chrome nor App Host "
+ << "yet Chrome Frame is not multi-install.";
}
ChromeBinariesRules binaries_rules;
@@ -609,6 +674,25 @@ bool InstallationValidator::ValidateInstallationTypeForState(
*type = static_cast<InstallationType>(*type | cf_bit);
}
+ // Is Chrome App Host installed?
+ product_state =
+ machine_state.GetProductState(system_level,
+ BrowserDistribution::CHROME_APP_HOST);
+ if (product_state != NULL) {
+ ChromeAppHostRules chrome_app_host_rules;
+ ValidateProduct(machine_state, system_level, *product_state,
+ chrome_app_host_rules, &rock_on);
+ *type = static_cast<InstallationType>(*type | ProductBits::CHROME_APP_HOST);
+ if (system_level) {
+ LOG(ERROR) << "Chrome App Host must not be installed at system level.";
+ rock_on = false;
+ }
+ if (!product_state->is_multi_install()) {
+ LOG(ERROR) << "Chrome App Host must always be multi-install.";
+ rock_on = false;
+ }
+ }
+
DCHECK_NE(std::find(&kInstallationTypes[0],
&kInstallationTypes[arraysize(kInstallationTypes)],
*type),

Powered by Google App Engine
This is Rietveld 408576698