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

Side by Side Diff: chrome/installer/util/installation_validator.cc

Issue 811283002: [Installer] Cleaning up dead code for App Launcher / App Host installs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comment fix. Created 5 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Implementation of the installation validator. 5 // Implementation of the installation validator.
6 6
7 #include "chrome/installer/util/installation_validator.h" 7 #include "chrome/installer/util/installation_validator.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <set> 10 #include <set>
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 } 80 }
81 81
82 bool InstallationValidator::ChromeFrameRules::UsageStatsAllowed( 82 bool InstallationValidator::ChromeFrameRules::UsageStatsAllowed(
83 const ProductContext& ctx) const { 83 const ProductContext& ctx) const {
84 // Products must not have usagestats consent values when multi-install 84 // Products must not have usagestats consent values when multi-install
85 // (only the multi-install binaries may). 85 // (only the multi-install binaries may).
86 return !ctx.state.is_multi_install(); 86 return !ctx.state.is_multi_install();
87 } 87 }
88 88
89 BrowserDistribution::Type 89 BrowserDistribution::Type
90 InstallationValidator::ChromeAppHostRules::distribution_type() const {
91 return BrowserDistribution::CHROME_APP_HOST;
92 }
93
94 void InstallationValidator::ChromeAppHostRules::AddUninstallSwitchExpectations(
95 const ProductContext& ctx,
96 SwitchExpectations* expectations) const {
97 // --app-launcher must be present.
98 expectations->push_back(
99 std::make_pair(std::string(switches::kChromeAppLauncher), true));
100
101 // --chrome must not be present.
102 expectations->push_back(std::make_pair(std::string(switches::kChrome),
103 false));
104 // --chrome-frame must not be present.
105 expectations->push_back(std::make_pair(std::string(switches::kChromeFrame),
106 false));
107 }
108
109 void InstallationValidator::ChromeAppHostRules::AddRenameSwitchExpectations(
110 const ProductContext& ctx,
111 SwitchExpectations* expectations) const {
112 // TODO(erikwright): I guess there will be none?
113 }
114
115 bool InstallationValidator::ChromeAppHostRules::UsageStatsAllowed(
116 const ProductContext& ctx) const {
117 // App Host doesn't manage usage stats. The Chrome Binaries will.
118 return false;
119 }
120
121 BrowserDistribution::Type
122 InstallationValidator::ChromeBinariesRules::distribution_type() const { 90 InstallationValidator::ChromeBinariesRules::distribution_type() const {
123 return BrowserDistribution::CHROME_BINARIES; 91 return BrowserDistribution::CHROME_BINARIES;
124 } 92 }
125 93
126 void InstallationValidator::ChromeBinariesRules::AddUninstallSwitchExpectations( 94 void InstallationValidator::ChromeBinariesRules::AddUninstallSwitchExpectations(
127 const ProductContext& ctx, 95 const ProductContext& ctx,
128 SwitchExpectations* expectations) const { 96 SwitchExpectations* expectations) const {
129 NOTREACHED(); 97 NOTREACHED();
130 } 98 }
131 99
(...skipping 13 matching lines...) Expand all
145 const InstallationValidator::InstallationType 113 const InstallationValidator::InstallationType
146 InstallationValidator::kInstallationTypes[] = { 114 InstallationValidator::kInstallationTypes[] = {
147 NO_PRODUCTS, 115 NO_PRODUCTS,
148 CHROME_SINGLE, 116 CHROME_SINGLE,
149 CHROME_MULTI, 117 CHROME_MULTI,
150 CHROME_FRAME_SINGLE, 118 CHROME_FRAME_SINGLE,
151 CHROME_FRAME_SINGLE_CHROME_SINGLE, 119 CHROME_FRAME_SINGLE_CHROME_SINGLE,
152 CHROME_FRAME_SINGLE_CHROME_MULTI, 120 CHROME_FRAME_SINGLE_CHROME_MULTI,
153 CHROME_FRAME_MULTI, 121 CHROME_FRAME_MULTI,
154 CHROME_FRAME_MULTI_CHROME_MULTI, 122 CHROME_FRAME_MULTI_CHROME_MULTI,
155 CHROME_APP_HOST,
156 CHROME_APP_HOST_CHROME_FRAME_SINGLE,
157 CHROME_APP_HOST_CHROME_FRAME_SINGLE_CHROME_MULTI,
158 CHROME_APP_HOST_CHROME_FRAME_MULTI,
159 CHROME_APP_HOST_CHROME_FRAME_MULTI_CHROME_MULTI,
160 CHROME_APP_HOST_CHROME_MULTI,
161 }; 123 };
162 124
163 void InstallationValidator::ValidateAppCommandFlags( 125 void InstallationValidator::ValidateAppCommandFlags(
164 const ProductContext& ctx, 126 const ProductContext& ctx,
165 const AppCommand& app_cmd, 127 const AppCommand& app_cmd,
166 const std::set<base::string16>& flags_exp, 128 const std::set<base::string16>& flags_exp,
167 const base::string16& name, 129 const base::string16& name,
168 bool* is_valid) { 130 bool* is_valid) {
169 const struct { 131 const struct {
170 const base::string16 exp_key; 132 const base::string16 exp_key;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 expected.push_back(std::make_pair(std::string(switches::kChrome), 180 expected.push_back(std::make_pair(std::string(switches::kChrome),
219 ctx.state.is_multi_install())); 181 ctx.state.is_multi_install()));
220 182
221 ValidateCommandExpectations(ctx, cmd_line, expected, name, is_valid); 183 ValidateCommandExpectations(ctx, cmd_line, expected, name, is_valid);
222 184
223 std::set<base::string16> flags_exp; 185 std::set<base::string16> flags_exp;
224 flags_exp.insert(google_update::kRegAutoRunOnOSUpgradeField); 186 flags_exp.insert(google_update::kRegAutoRunOnOSUpgradeField);
225 ValidateAppCommandFlags(ctx, app_cmd, flags_exp, name, is_valid); 187 ValidateAppCommandFlags(ctx, app_cmd, flags_exp, name, is_valid);
226 } 188 }
227 189
228 // Validates the "query-eula-acceptance" Google Update product command.
229 void InstallationValidator::ValidateQueryEULAAcceptanceCommand(
230 const ProductContext& ctx,
231 const AppCommand& app_cmd,
232 bool* is_valid) {
233 DCHECK(is_valid);
234
235 base::CommandLine cmd_line(
236 base::CommandLine::FromString(app_cmd.command_line()));
237 base::string16 name(kCmdQueryEULAAcceptance);
238
239 ValidateSetupPath(ctx, cmd_line.GetProgram(), name, is_valid);
240
241 SwitchExpectations expected;
242 expected.push_back(std::make_pair(std::string(switches::kQueryEULAAcceptance),
243 true));
244 expected.push_back(std::make_pair(std::string(switches::kSystemLevel),
245 ctx.system_install));
246
247 ValidateCommandExpectations(ctx, cmd_line, expected, name, is_valid);
248
249 std::set<base::string16> flags_exp;
250 flags_exp.insert(google_update::kRegWebAccessibleField);
251 flags_exp.insert(google_update::kRegRunAsUserField);
252 ValidateAppCommandFlags(ctx, app_cmd, flags_exp, name, is_valid);
253 }
254
255 // Validates the "quick-enable-application-host" Google Update product command.
256 void InstallationValidator::ValidateQuickEnableApplicationHostCommand(
257 const ProductContext& ctx,
258 const AppCommand& app_cmd,
259 bool* is_valid) {
260 DCHECK(is_valid);
261
262 base::CommandLine cmd_line(
263 base::CommandLine::FromString(app_cmd.command_line()));
264 base::string16 name(kCmdQuickEnableApplicationHost);
265
266 ValidateSetupPath(ctx, cmd_line.GetProgram(), name, is_valid);
267
268 SwitchExpectations expected;
269
270 expected.push_back(std::make_pair(
271 std::string(switches::kChromeAppLauncher), true));
272 expected.push_back(std::make_pair(
273 std::string(switches::kSystemLevel), false));
274 expected.push_back(std::make_pair(
275 std::string(switches::kMultiInstall), true));
276 expected.push_back(std::make_pair(
277 std::string(switches::kEnsureGoogleUpdatePresent), true));
278
279 ValidateCommandExpectations(ctx, cmd_line, expected, name, is_valid);
280
281 std::set<base::string16> flags_exp;
282 flags_exp.insert(google_update::kRegSendsPingsField);
283 flags_exp.insert(google_update::kRegWebAccessibleField);
284 flags_exp.insert(google_update::kRegRunAsUserField);
285 ValidateAppCommandFlags(ctx, app_cmd, flags_exp, name, is_valid);
286 }
287
288 // Validates a product's set of Google Update product commands against a 190 // Validates a product's set of Google Update product commands against a
289 // collection of expectations. 191 // collection of expectations.
290 void InstallationValidator::ValidateAppCommandExpectations( 192 void InstallationValidator::ValidateAppCommandExpectations(
291 const ProductContext& ctx, 193 const ProductContext& ctx,
292 const CommandExpectations& expectations, 194 const CommandExpectations& expectations,
293 bool* is_valid) { 195 bool* is_valid) {
294 DCHECK(is_valid); 196 DCHECK(is_valid);
295 197
296 CommandExpectations the_expectations(expectations); 198 CommandExpectations the_expectations(expectations);
297 199
(...skipping 20 matching lines...) Expand all
318 CommandExpectations::const_iterator scan(the_expectations.begin()); 220 CommandExpectations::const_iterator scan(the_expectations.begin());
319 CommandExpectations::const_iterator end(the_expectations.end()); 221 CommandExpectations::const_iterator end(the_expectations.end());
320 for (; scan != end; ++scan) { 222 for (; scan != end; ++scan) {
321 *is_valid = false; 223 *is_valid = false;
322 LOG(ERROR) << ctx.dist->GetDisplayName() 224 LOG(ERROR) << ctx.dist->GetDisplayName()
323 << " is missing the Google Update product command named \"" 225 << " is missing the Google Update product command named \""
324 << scan->first << "\"."; 226 << scan->first << "\".";
325 } 227 }
326 } 228 }
327 229
328 // Validates the multi-install binaries' Google Update commands.
329 void InstallationValidator::ValidateBinariesCommands(
330 const ProductContext& ctx,
331 bool* is_valid) {
332 DCHECK(is_valid);
333
334 const ProductState* binaries_state = ctx.machine_state.GetProductState(
335 ctx.system_install, BrowserDistribution::CHROME_BINARIES);
336
337 CommandExpectations expectations;
338
339 if (binaries_state != NULL) {
340 expectations[kCmdQuickEnableApplicationHost] =
341 &ValidateQuickEnableApplicationHostCommand;
342
343 expectations[kCmdQueryEULAAcceptance] = &ValidateQueryEULAAcceptanceCommand;
344 }
345
346 ValidateAppCommandExpectations(ctx, expectations, is_valid);
347 }
348
349 // Validates the multi-install binaries at level |system_level|. 230 // Validates the multi-install binaries at level |system_level|.
350 void InstallationValidator::ValidateBinaries( 231 void InstallationValidator::ValidateBinaries(
351 const InstallationState& machine_state, 232 const InstallationState& machine_state,
352 bool system_install, 233 bool system_install,
353 const ProductState& binaries_state, 234 const ProductState& binaries_state,
354 bool* is_valid) { 235 bool* is_valid) {
355 const ChannelInfo& channel = binaries_state.channel(); 236 const ChannelInfo& channel = binaries_state.channel();
356 237
357 // ap must have -multi 238 // ap must have -multi
358 if (!channel.IsMultiInstall()) { 239 if (!channel.IsMultiInstall()) {
(...skipping 26 matching lines...) Expand all
385 LOG(ERROR) << "Chrome Binaries are missing \"-chromeframe\" in channel" 266 LOG(ERROR) << "Chrome Binaries are missing \"-chromeframe\" in channel"
386 " name: \"" << channel.value() << "\""; 267 " name: \"" << channel.value() << "\"";
387 } 268 }
388 } else if (channel.IsChromeFrame()) { 269 } else if (channel.IsChromeFrame()) {
389 *is_valid = false; 270 *is_valid = false;
390 LOG(ERROR) << "Chrome Binaries have \"-chromeframe\" in channel name, yet " 271 LOG(ERROR) << "Chrome Binaries have \"-chromeframe\" in channel name, yet "
391 "Chrome Frame is not installed multi: \"" << channel.value() 272 "Chrome Frame is not installed multi: \"" << channel.value()
392 << "\""; 273 << "\"";
393 } 274 }
394 275
395 // ap must have -applauncher iff Chrome App Launcher is installed multi 276 // Chrome or Chrome Frame must be present
396 const ProductState* app_host_state = machine_state.GetProductState( 277 if (chrome_state == NULL && cf_state == NULL) {
397 system_install, BrowserDistribution::CHROME_APP_HOST);
398 if (app_host_state != NULL) {
399 if (!app_host_state->is_multi_install()) {
400 *is_valid = false;
401 LOG(ERROR) << "Chrome App Launcher is installed in non-multi mode.";
402 }
403 if (!channel.IsAppLauncher()) {
404 *is_valid = false;
405 LOG(ERROR) << "Chrome Binaries are missing \"-applauncher\" in channel"
406 " name: \"" << channel.value() << "\"";
407 }
408 } else if (channel.IsAppLauncher()) {
409 *is_valid = false;
410 LOG(ERROR) << "Chrome Binaries have \"-applauncher\" in channel name, yet "
411 "Chrome App Launcher is not installed: \"" << channel.value()
412 << "\"";
413 }
414
415 // Chrome, Chrome Frame, or App Host must be present
416 if (chrome_state == NULL && cf_state == NULL && app_host_state == NULL) {
417 *is_valid = false; 278 *is_valid = false;
418 LOG(ERROR) << "Chrome Binaries are present with no other products."; 279 LOG(ERROR) << "Chrome Binaries are present with no other products.";
419 } 280 }
420 281
282
421 // Chrome must be multi-install if present. 283 // Chrome must be multi-install if present.
422 if (chrome_state != NULL && !chrome_state->is_multi_install()) { 284 if (chrome_state != NULL && !chrome_state->is_multi_install()) {
423 *is_valid = false; 285 *is_valid = false;
424 LOG(ERROR) 286 LOG(ERROR)
425 << "Chrome Binaries are present yet Chrome is not multi-install."; 287 << "Chrome Binaries are present yet Chrome is not multi-install.";
426 } 288 }
427 289
428 // Chrome Frame must be multi-install if Chrome & App Host are not present. 290 // Chrome Frame must be multi-install if Chrome is not present.
429 if (cf_state != NULL && app_host_state == NULL && chrome_state == NULL && 291 if (cf_state != NULL && chrome_state == NULL &&
430 !cf_state->is_multi_install()) { 292 !cf_state->is_multi_install()) {
431 *is_valid = false; 293 *is_valid = false;
432 LOG(ERROR) << "Chrome Binaries are present without Chrome nor App Launcher " 294 LOG(ERROR) << "Chrome Binaries are present without Chrome, yet Chrome Frame"
433 << "yet Chrome Frame is not multi-install."; 295 << " is not multi-install.";
434 } 296 }
435 297
436 ChromeBinariesRules binaries_rules; 298 ChromeBinariesRules binaries_rules;
437 ProductContext ctx(machine_state, system_install, binaries_state, 299 ProductContext ctx(machine_state, system_install, binaries_state,
438 binaries_rules); 300 binaries_rules);
439 301
440 ValidateBinariesCommands(ctx, is_valid);
441
442 ValidateUsageStats(ctx, is_valid); 302 ValidateUsageStats(ctx, is_valid);
443 } 303 }
444 304
445 // Validates the path to |setup_exe| for the product described by |ctx|. 305 // Validates the path to |setup_exe| for the product described by |ctx|.
446 void InstallationValidator::ValidateSetupPath(const ProductContext& ctx, 306 void InstallationValidator::ValidateSetupPath(const ProductContext& ctx,
447 const base::FilePath& setup_exe, 307 const base::FilePath& setup_exe,
448 const base::string16& purpose, 308 const base::string16& purpose,
449 bool* is_valid) { 309 bool* is_valid) {
450 DCHECK(is_valid); 310 DCHECK(is_valid);
451 311
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 // Validates the multi-install state of the product described in |ctx|. 431 // Validates the multi-install state of the product described in |ctx|.
572 void InstallationValidator::ValidateMultiInstallProduct( 432 void InstallationValidator::ValidateMultiInstallProduct(
573 const ProductContext& ctx, 433 const ProductContext& ctx,
574 bool* is_valid) { 434 bool* is_valid) {
575 DCHECK(is_valid); 435 DCHECK(is_valid);
576 436
577 const ProductState* binaries = 437 const ProductState* binaries =
578 ctx.machine_state.GetProductState(ctx.system_install, 438 ctx.machine_state.GetProductState(ctx.system_install,
579 BrowserDistribution::CHROME_BINARIES); 439 BrowserDistribution::CHROME_BINARIES);
580 if (!binaries) { 440 if (!binaries) {
581 if (ctx.dist->GetType() == BrowserDistribution::CHROME_APP_HOST) { 441 *is_valid = false;
582 if (!ctx.machine_state.GetProductState( 442 LOG(ERROR) << ctx.dist->GetDisplayName()
583 true, // system-level 443 << " (" << ctx.state.version().GetString() << ") is installed "
584 BrowserDistribution::CHROME_BINARIES) && 444 << "without Chrome Binaries.";
585 !ctx.machine_state.GetProductState(
586 true, // system-level
587 BrowserDistribution::CHROME_BROWSER)) {
588 *is_valid = false;
589 LOG(ERROR) << ctx.dist->GetDisplayName()
590 << " (" << ctx.state.version().GetString() << ") is "
591 << "installed without Chrome Binaries or a system-level "
592 << "Chrome.";
593 }
594 } else {
595 *is_valid = false;
596 LOG(ERROR) << ctx.dist->GetDisplayName()
597 << " (" << ctx.state.version().GetString() << ") is installed "
598 << "without Chrome Binaries.";
599 }
600 } else { 445 } else {
601 // Version must match that of binaries. 446 // Version must match that of binaries.
602 if (ctx.state.version().CompareTo(binaries->version()) != 0) { 447 if (ctx.state.version().CompareTo(binaries->version()) != 0) {
603 *is_valid = false; 448 *is_valid = false;
604 LOG(ERROR) << "Version of " << ctx.dist->GetDisplayName() 449 LOG(ERROR) << "Version of " << ctx.dist->GetDisplayName()
605 << " (" << ctx.state.version().GetString() << ") does not " 450 << " (" << ctx.state.version().GetString() << ") does not "
606 "match that of Chrome Binaries (" 451 "match that of Chrome Binaries ("
607 << binaries->version().GetString() << ")."; 452 << binaries->version().GetString() << ").";
608 } 453 }
609 454
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 if (product_state != NULL) { 559 if (product_state != NULL) {
715 ChromeFrameRules chrome_frame_rules; 560 ChromeFrameRules chrome_frame_rules;
716 ValidateProduct(machine_state, system_level, *product_state, 561 ValidateProduct(machine_state, system_level, *product_state,
717 chrome_frame_rules, &rock_on); 562 chrome_frame_rules, &rock_on);
718 int cf_bit = !product_state->is_multi_install() ? 563 int cf_bit = !product_state->is_multi_install() ?
719 ProductBits::CHROME_FRAME_SINGLE : 564 ProductBits::CHROME_FRAME_SINGLE :
720 ProductBits::CHROME_FRAME_MULTI; 565 ProductBits::CHROME_FRAME_MULTI;
721 *type = static_cast<InstallationType>(*type | cf_bit); 566 *type = static_cast<InstallationType>(*type | cf_bit);
722 } 567 }
723 568
724 // Is Chrome App Host installed?
725 product_state =
726 machine_state.GetProductState(system_level,
727 BrowserDistribution::CHROME_APP_HOST);
728 if (product_state != NULL) {
729 ChromeAppHostRules chrome_app_host_rules;
730 ValidateProduct(machine_state, system_level, *product_state,
731 chrome_app_host_rules, &rock_on);
732 *type = static_cast<InstallationType>(*type | ProductBits::CHROME_APP_HOST);
733 if (!product_state->is_multi_install()) {
734 LOG(ERROR) << "Chrome App Launcher must always be multi-install.";
735 rock_on = false;
736 }
737 }
738
739 DCHECK_NE(std::find(&kInstallationTypes[0], 569 DCHECK_NE(std::find(&kInstallationTypes[0],
740 &kInstallationTypes[arraysize(kInstallationTypes)], 570 &kInstallationTypes[arraysize(kInstallationTypes)],
741 *type), 571 *type),
742 &kInstallationTypes[arraysize(kInstallationTypes)]) 572 &kInstallationTypes[arraysize(kInstallationTypes)])
743 << "Invalid combination of products found on system (" << *type << ")"; 573 << "Invalid combination of products found on system (" << *type << ")";
744 574
745 return rock_on; 575 return rock_on;
746 } 576 }
747 577
748 // static 578 // static
749 bool InstallationValidator::ValidateInstallationType(bool system_level, 579 bool InstallationValidator::ValidateInstallationType(bool system_level,
750 InstallationType* type) { 580 InstallationType* type) {
751 DCHECK(type); 581 DCHECK(type);
752 InstallationState machine_state; 582 InstallationState machine_state;
753 583
754 machine_state.Initialize(); 584 machine_state.Initialize();
755 585
756 return ValidateInstallationTypeForState(machine_state, system_level, type); 586 return ValidateInstallationTypeForState(machine_state, system_level, type);
757 } 587 }
758 588
759 } // namespace installer 589 } // namespace installer
OLDNEW
« no previous file with comments | « chrome/installer/util/installation_validator.h ('k') | chrome/installer/util/installation_validator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698