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

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

Issue 7005019: Put SxS switches back into the rename command. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « chrome/installer/util/installation_validator.h ('k') | chrome/installer/util/product.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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>
11 11
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/version.h" 13 #include "base/version.h"
14 #include "chrome/installer/util/browser_distribution.h" 14 #include "chrome/installer/util/browser_distribution.h"
15 #include "chrome/installer/util/helper.h" 15 #include "chrome/installer/util/helper.h"
16 #include "chrome/installer/util/installation_state.h" 16 #include "chrome/installer/util/installation_state.h"
17 17
18 namespace installer { 18 namespace installer {
19 19
20 BrowserDistribution::Type 20 BrowserDistribution::Type
21 InstallationValidator::ChromeRules::distribution_type() const { 21 InstallationValidator::ChromeRules::distribution_type() const {
22 return BrowserDistribution::CHROME_BROWSER; 22 return BrowserDistribution::CHROME_BROWSER;
23 } 23 }
24 24
25 void InstallationValidator::ChromeRules::AddProductSwitchExpectations( 25 void InstallationValidator::ChromeRules::AddUninstallSwitchExpectations(
26 const InstallationState& machine_state, 26 const InstallationState& machine_state,
27 bool system_install, 27 bool system_install,
28 const ProductState& product_state, 28 const ProductState& product_state,
29 SwitchExpectations* expectations) const { 29 SwitchExpectations* expectations) const {
30 const bool is_multi_install = 30 const bool is_multi_install =
31 product_state.uninstall_command().HasSwitch(switches::kMultiInstall); 31 product_state.uninstall_command().HasSwitch(switches::kMultiInstall);
32 32
33 // --chrome should be present iff --multi-install. This wasn't the case in 33 // --chrome should be present for uninstall iff --multi-install. This wasn't
34 // Chrome 10 (between r68996 and r72497), though, so consider it optional. 34 // the case in Chrome 10 (between r68996 and r72497), though, so consider it
35 // optional.
35 36
36 // --chrome-frame --ready-mode should be present iff CF in ready mode. 37 // --chrome-frame --ready-mode should be present for uninstall iff CF in ready
38 // mode.
37 const ProductState* cf_state = 39 const ProductState* cf_state =
38 machine_state.GetProductState(system_install, 40 machine_state.GetProductState(system_install,
39 BrowserDistribution::CHROME_FRAME); 41 BrowserDistribution::CHROME_FRAME);
40 const bool ready_mode = 42 const bool ready_mode =
41 cf_state != NULL && 43 cf_state != NULL &&
42 cf_state->uninstall_command().HasSwitch(switches::kChromeFrameReadyMode); 44 cf_state->uninstall_command().HasSwitch(switches::kChromeFrameReadyMode);
43 expectations->push_back(std::make_pair(std::string(switches::kChromeFrame), 45 expectations->push_back(std::make_pair(std::string(switches::kChromeFrame),
44 ready_mode)); 46 ready_mode));
45 expectations->push_back( 47 expectations->push_back(
46 std::make_pair(std::string(switches::kChromeFrameReadyMode), ready_mode)); 48 std::make_pair(std::string(switches::kChromeFrameReadyMode), ready_mode));
47 } 49 }
48 50
51 void InstallationValidator::ChromeRules::AddRenameSwitchExpectations(
52 const InstallationState& machine_state,
53 bool system_install,
54 const ProductState& product_state,
55 SwitchExpectations* expectations) const {
56 const bool is_multi_install =
57 product_state.uninstall_command().HasSwitch(switches::kMultiInstall);
58
59 // --chrome should not be present for rename. It was for a time, so we'll be
60 // lenient so that mini_installer tests pass.
61
62 // --chrome-frame --ready-mode should never be present.
63 expectations->push_back(
64 std::make_pair(std::string(switches::kChromeFrame), false));
65 expectations->push_back(
66 std::make_pair(std::string(switches::kChromeFrameReadyMode), false));
67 }
68
49 bool InstallationValidator::ChromeRules::UsageStatsAllowed( 69 bool InstallationValidator::ChromeRules::UsageStatsAllowed(
50 const ProductState& product_state) const { 70 const ProductState& product_state) const {
51 // Products must not have usagestats consent values when multi-install 71 // Products must not have usagestats consent values when multi-install
52 // (only the multi-install binaries may). 72 // (only the multi-install binaries may).
53 return !product_state.is_multi_install(); 73 return !product_state.is_multi_install();
54 } 74 }
55 75
56 BrowserDistribution::Type 76 BrowserDistribution::Type
57 InstallationValidator::ChromeFrameRules::distribution_type() const { 77 InstallationValidator::ChromeFrameRules::distribution_type() const {
58 return BrowserDistribution::CHROME_FRAME; 78 return BrowserDistribution::CHROME_FRAME;
59 } 79 }
60 80
61 void InstallationValidator::ChromeFrameRules::AddProductSwitchExpectations( 81 void InstallationValidator::ChromeFrameRules::AddUninstallSwitchExpectations(
62 const InstallationState& machine_state, 82 const InstallationState& machine_state,
63 bool system_install, 83 bool system_install,
64 const ProductState& product_state, 84 const ProductState& product_state,
65 SwitchExpectations* expectations) const { 85 SwitchExpectations* expectations) const {
66 // --chrome-frame must be present. 86 // --chrome-frame must be present.
67 expectations->push_back(std::make_pair(std::string(switches::kChromeFrame), 87 expectations->push_back(std::make_pair(std::string(switches::kChromeFrame),
68 true)); 88 true));
69 // --chrome must not be present. 89 // --chrome must not be present.
70 expectations->push_back(std::make_pair(std::string(switches::kChrome), 90 expectations->push_back(std::make_pair(std::string(switches::kChrome),
71 false)); 91 false));
72 } 92 }
73 93
94 void InstallationValidator::ChromeFrameRules::AddRenameSwitchExpectations(
95 const InstallationState& machine_state,
96 bool system_install,
97 const ProductState& product_state,
98 SwitchExpectations* expectations) const {
99 // --chrome-frame must be present for SxS rename.
100 expectations->push_back(std::make_pair(std::string(switches::kChromeFrame),
101 !product_state.is_multi_install()));
102 // --chrome must not be present.
103 expectations->push_back(std::make_pair(std::string(switches::kChrome),
104 false));
105 }
106
74 bool InstallationValidator::ChromeFrameRules::UsageStatsAllowed( 107 bool InstallationValidator::ChromeFrameRules::UsageStatsAllowed(
75 const ProductState& product_state) const { 108 const ProductState& product_state) const {
76 // Products must not have usagestats consent values when multi-install 109 // Products must not have usagestats consent values when multi-install
77 // (only the multi-install binaries may). 110 // (only the multi-install binaries may).
78 return !product_state.is_multi_install(); 111 return !product_state.is_multi_install();
79 } 112 }
80 113
81 BrowserDistribution::Type 114 BrowserDistribution::Type
82 InstallationValidator::ChromeBinariesRules::distribution_type() const { 115 InstallationValidator::ChromeBinariesRules::distribution_type() const {
83 return BrowserDistribution::CHROME_BINARIES; 116 return BrowserDistribution::CHROME_BINARIES;
84 } 117 }
85 118
86 void InstallationValidator::ChromeBinariesRules::AddProductSwitchExpectations( 119 void InstallationValidator::ChromeBinariesRules::AddUninstallSwitchExpectations(
87 const InstallationState& machine_state, 120 const InstallationState& machine_state,
88 bool system_install, 121 bool system_install,
89 const ProductState& product_state, 122 const ProductState& product_state,
90 SwitchExpectations* expectations) const { 123 SwitchExpectations* expectations) const {
91 NOTREACHED(); 124 NOTREACHED();
92 } 125 }
93 126
127 void InstallationValidator::ChromeBinariesRules::AddRenameSwitchExpectations(
128 const InstallationState& machine_state,
129 bool system_install,
130 const ProductState& product_state,
131 SwitchExpectations* expectations) const {
132 NOTREACHED();
133 }
134
94 bool InstallationValidator::ChromeBinariesRules::UsageStatsAllowed( 135 bool InstallationValidator::ChromeBinariesRules::UsageStatsAllowed(
95 const ProductState& product_state) const { 136 const ProductState& product_state) const {
96 // UsageStats consent values are always allowed on the binaries. 137 // UsageStats consent values are always allowed on the binaries.
97 return true; 138 return true;
98 } 139 }
99 140
100 // static 141 // static
101 const InstallationValidator::InstallationType 142 const InstallationValidator::InstallationType
102 InstallationValidator::kInstallationTypes[] = { 143 InstallationValidator::kInstallationTypes[] = {
103 NO_PRODUCTS, 144 NO_PRODUCTS,
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 ValidateSetupPath(ctx, command.GetProgram(), "uninstaller", is_valid); 406 ValidateSetupPath(ctx, command.GetProgram(), "uninstaller", is_valid);
366 407
367 const bool is_multi_install = ctx.state.is_multi_install(); 408 const bool is_multi_install = ctx.state.is_multi_install();
368 SwitchExpectations expected; 409 SwitchExpectations expected;
369 410
370 expected.push_back(std::make_pair(std::string(switches::kUninstall), true)); 411 expected.push_back(std::make_pair(std::string(switches::kUninstall), true));
371 expected.push_back(std::make_pair(std::string(switches::kSystemLevel), 412 expected.push_back(std::make_pair(std::string(switches::kSystemLevel),
372 ctx.system_install)); 413 ctx.system_install));
373 expected.push_back(std::make_pair(std::string(switches::kMultiInstall), 414 expected.push_back(std::make_pair(std::string(switches::kMultiInstall),
374 is_multi_install)); 415 is_multi_install));
375 ctx.rules.AddProductSwitchExpectations(ctx.machine_state, 416 ctx.rules.AddUninstallSwitchExpectations(ctx.machine_state,
376 ctx.system_install, 417 ctx.system_install,
377 ctx.state, &expected); 418 ctx.state,
419 &expected);
378 420
379 ValidateCommandExpectations(ctx, command, expected, source, is_valid); 421 ValidateCommandExpectations(ctx, command, expected, source, is_valid);
380 } 422 }
381 423
382 // Validates the rename command for the product described by |ctx|. 424 // Validates the rename command for the product described by |ctx|.
383 void InstallationValidator::ValidateRenameCommand(const ProductContext& ctx, 425 void InstallationValidator::ValidateRenameCommand(const ProductContext& ctx,
384 bool* is_valid) { 426 bool* is_valid) {
385 DCHECK(is_valid); 427 DCHECK(is_valid);
386 DCHECK(!ctx.state.rename_cmd().empty()); 428 DCHECK(!ctx.state.rename_cmd().empty());
387 429
388 CommandLine command = CommandLine::FromString(ctx.state.rename_cmd()); 430 CommandLine command = CommandLine::FromString(ctx.state.rename_cmd());
389 431
390 ValidateSetupPath(ctx, command.GetProgram(), "in-use renamer", is_valid); 432 ValidateSetupPath(ctx, command.GetProgram(), "in-use renamer", is_valid);
391 433
392 SwitchExpectations expected; 434 SwitchExpectations expected;
393 435
394 expected.push_back(std::make_pair(std::string(switches::kRenameChromeExe), 436 expected.push_back(std::make_pair(std::string(switches::kRenameChromeExe),
395 true)); 437 true));
396 expected.push_back(std::make_pair(std::string(switches::kSystemLevel), 438 expected.push_back(std::make_pair(std::string(switches::kSystemLevel),
397 ctx.system_install)); 439 ctx.system_install));
398 expected.push_back(std::make_pair(std::string(switches::kMultiInstall), 440 expected.push_back(std::make_pair(std::string(switches::kMultiInstall),
399 ctx.state.is_multi_install())); 441 ctx.state.is_multi_install()));
442 ctx.rules.AddRenameSwitchExpectations(ctx.machine_state,
443 ctx.system_install,
444 ctx.state,
445 &expected);
400 446
401 ValidateCommandExpectations(ctx, command, expected, "in-use renamer", 447 ValidateCommandExpectations(ctx, command, expected, "in-use renamer",
402 is_valid); 448 is_valid);
403 } 449 }
404 450
405 // Validates the "opv" and "cmd" values for the product described in |ctx|. 451 // Validates the "opv" and "cmd" values for the product described in |ctx|.
406 void InstallationValidator::ValidateOldVersionValues( 452 void InstallationValidator::ValidateOldVersionValues(
407 const ProductContext& ctx, 453 const ProductContext& ctx,
408 bool* is_valid) { 454 bool* is_valid) {
409 DCHECK(is_valid); 455 DCHECK(is_valid);
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 InstallationType* type) { 623 InstallationType* type) {
578 DCHECK(type); 624 DCHECK(type);
579 InstallationState machine_state; 625 InstallationState machine_state;
580 626
581 machine_state.Initialize(); 627 machine_state.Initialize();
582 628
583 return ValidateInstallationTypeForState(machine_state, system_level, type); 629 return ValidateInstallationTypeForState(machine_state, system_level, type);
584 } 630 }
585 631
586 } // namespace installer 632 } // namespace installer
OLDNEW
« no previous file with comments | « chrome/installer/util/installation_validator.h ('k') | chrome/installer/util/product.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698