Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 #include "chrome/installer/util/installer_state.h" | 5 #include "chrome/installer/util/installer_state.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <functional> | 8 #include <functional> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 104 verbose_logging_ = false; | 104 verbose_logging_ = false; |
| 105 | 105 |
| 106 if (!prefs.GetBool(master_preferences::kMultiInstall, &pref_bool)) | 106 if (!prefs.GetBool(master_preferences::kMultiInstall, &pref_bool)) |
| 107 pref_bool = false; | 107 pref_bool = false; |
| 108 set_package_type(pref_bool ? MULTI_PACKAGE : SINGLE_PACKAGE); | 108 set_package_type(pref_bool ? MULTI_PACKAGE : SINGLE_PACKAGE); |
| 109 | 109 |
| 110 if (!prefs.GetBool(master_preferences::kMsi, &msi_)) | 110 if (!prefs.GetBool(master_preferences::kMsi, &msi_)) |
| 111 msi_ = false; | 111 msi_ = false; |
| 112 | 112 |
| 113 const bool is_uninstall = command_line.HasSwitch(switches::kUninstall); | 113 const bool is_uninstall = command_line.HasSwitch(switches::kUninstall); |
| 114 | 114 |
|
grt (UTC plus 2)
2012/07/12 18:37:10
suggestion: add this here
const wchar_t* const o
| |
| 115 if (prefs.install_chrome()) { | 115 if (prefs.install_chrome()) { |
| 116 Product* p = | 116 Product* p = |
| 117 AddProductFromPreferences(BrowserDistribution::CHROME_BROWSER, prefs, | 117 AddProductFromPreferences(BrowserDistribution::CHROME_BROWSER, prefs, |
| 118 machine_state); | 118 machine_state); |
| 119 VLOG(1) << (is_uninstall ? "Uninstall" : "Install") | 119 VLOG(1) << (is_uninstall ? "Uninstall" : "Install") |
| 120 << " distribution: " << p->distribution()->GetAppShortCutName(); | 120 << " distribution: " << p->distribution()->GetAppShortCutName(); |
| 121 } | 121 } |
| 122 if (prefs.install_chrome_frame()) { | 122 if (prefs.install_chrome_frame()) { |
| 123 Product* p = | 123 Product* p = |
| 124 AddProductFromPreferences(BrowserDistribution::CHROME_FRAME, prefs, | 124 AddProductFromPreferences(BrowserDistribution::CHROME_FRAME, prefs, |
| 125 machine_state); | 125 machine_state); |
| 126 VLOG(1) << (is_uninstall ? "Uninstall" : "Install") | 126 VLOG(1) << (is_uninstall ? "Uninstall" : "Install") |
| 127 << " distribution: " << p->distribution()->GetAppShortCutName(); | 127 << " distribution: " << p->distribution()->GetAppShortCutName(); |
| 128 } | 128 } |
| 129 if (prefs.install_chrome_app_host()) { | |
| 130 Product* p = | |
| 131 AddProductFromPreferences(BrowserDistribution::CHROME_APP_HOST, prefs, | |
| 132 machine_state); | |
| 133 VLOG(1) << (is_uninstall ? "Uninstall" : "Install") | |
| 134 << " distribution: " << p->distribution()->GetAppShortCutName(); | |
| 135 } | |
| 129 | 136 |
| 137 if (is_uninstall && prefs.is_multi_install()) { | |
| 138 bool keep_binaries = false; | |
| 139 // Look for a product that is not the binaries and that is not being | |
| 140 // uninstalled. If not found, binaries are uninstalled too. | |
| 141 for (size_t i = 0; i < BrowserDistribution::kNumProductTypes; ++i) { | |
| 142 if (BrowserDistribution::kProductTypes[i] == | |
| 143 BrowserDistribution::CHROME_BINARIES) { | |
| 144 continue; | |
| 145 } | |
| 146 | |
| 147 if (machine_state.GetProductState( | |
| 148 system_install(), | |
| 149 BrowserDistribution::kProductTypes[i]) == NULL) { | |
| 150 // The product is not installed. | |
| 151 continue; | |
| 152 } | |
| 153 | |
| 154 // The product is installed. | |
| 155 | |
| 156 if (!FindProduct(BrowserDistribution::kProductTypes[i])) { | |
| 157 // The product is not being uninstalled. | |
| 158 keep_binaries = true; | |
| 159 break; | |
| 160 } | |
| 161 | |
| 162 // The product is being uninstalled. | |
| 163 } | |
| 164 if (!keep_binaries) { | |
| 165 Product* p = | |
| 166 AddProductFromPreferences(BrowserDistribution::CHROME_BINARIES, prefs, | |
| 167 machine_state); | |
| 168 VLOG(1) << (is_uninstall ? "Uninstall" : "Install") | |
| 169 << " distribution: " << p->distribution()->GetAppShortCutName(); | |
| 170 } | |
| 171 } | |
| 172 | |
| 130 BrowserDistribution* operand = NULL; | 173 BrowserDistribution* operand = NULL; |
| 131 | 174 |
| 132 if (is_uninstall) { | 175 if (is_uninstall) { |
| 133 operation_ = UNINSTALL; | 176 operation_ = UNINSTALL; |
| 134 } else if (!prefs.is_multi_install()) { | 177 } else if (!prefs.is_multi_install()) { |
| 135 // For a single-install, the current browser dist is the operand. | 178 // For a single-install, the current browser dist is the operand. |
| 136 operand = BrowserDistribution::GetDistribution(); | 179 operand = BrowserDistribution::GetDistribution(); |
| 137 operation_ = SINGLE_INSTALL_OR_UPDATE; | 180 operation_ = SINGLE_INSTALL_OR_UPDATE; |
| 138 } else if (IsMultiInstallUpdate(prefs, machine_state)) { | 181 } else if (IsMultiInstallUpdate(prefs, machine_state)) { |
| 139 // Updates driven by Google Update take place under the multi-installer's | 182 // Updates driven by Google Update take place under the multi-installer's |
| 140 // app guid. | 183 // app guid. |
| 141 operand = multi_package_distribution_; | 184 operand = multi_package_distribution_; |
| 142 operation_ = MULTI_UPDATE; | 185 operation_ = MULTI_UPDATE; |
| 143 } else { | 186 } else { |
| 144 // Initial and over installs will always take place under one of the | 187 // Initial and over installs will always take place under one of the |
| 145 // product app guids. Chrome Frame's will be used if only Chrome Frame | 188 // product app guids. Chrome Frame's will be used if only Chrome Frame |
|
grt (UTC plus 2)
2012/07/12 18:37:10
is this comment out of date now? is there such th
erikwright (departed)
2012/07/16 20:13:11
Not driven by Google Update per se, but the App Ho
| |
| 146 // is being installed. In all other cases, Chrome's is used. | 189 // is being installed. In all other cases, Chrome's is used. |
| 147 operation_ = MULTI_INSTALL; | 190 operation_ = MULTI_INSTALL; |
| 148 } | 191 } |
| 149 | 192 |
| 150 if (operand == NULL) { | 193 if (operand == NULL) { |
| 194 BrowserDistribution::Type operand_distribution_type = | |
| 195 BrowserDistribution::CHROME_BINARIES; | |
| 196 if (prefs.install_chrome()) | |
| 197 operand_distribution_type = BrowserDistribution::CHROME_BROWSER; | |
| 198 else if (prefs.install_chrome_frame()) | |
| 199 operand_distribution_type = BrowserDistribution::CHROME_FRAME; | |
| 200 else if (prefs.install_chrome_app_host()) | |
| 201 operand_distribution_type = BrowserDistribution::CHROME_APP_HOST; | |
| 202 else | |
| 203 NOTREACHED(); | |
| 204 | |
| 151 operand = BrowserDistribution::GetSpecificDistribution( | 205 operand = BrowserDistribution::GetSpecificDistribution( |
| 152 prefs.install_chrome() ? | 206 operand_distribution_type); |
| 153 BrowserDistribution::CHROME_BROWSER : | |
| 154 BrowserDistribution::CHROME_FRAME); | |
| 155 } | 207 } |
| 156 | 208 |
| 157 state_key_ = operand->GetStateKey(); | 209 state_key_ = operand->GetStateKey(); |
| 158 state_type_ = operand->GetType(); | 210 state_type_ = operand->GetType(); |
| 159 | 211 |
| 160 // Parse --critical-update-version=W.X.Y.Z | 212 // Parse --critical-update-version=W.X.Y.Z |
| 161 std::string critical_version_value( | 213 std::string critical_version_value( |
| 162 command_line.GetSwitchValueASCII(switches::kCriticalUpdateVersion)); | 214 command_line.GetSwitchValueASCII(switches::kCriticalUpdateVersion)); |
| 163 critical_update_version_ = Version(critical_version_value); | 215 critical_update_version_ = Version(critical_version_value); |
| 164 } | 216 } |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 617 if (is_multi_install()) { | 669 if (is_multi_install()) { |
| 618 InstallUtil::AddInstallerResultItems( | 670 InstallUtil::AddInstallerResultItems( |
| 619 system_install, multi_package_binaries_distribution()->GetStateKey(), | 671 system_install, multi_package_binaries_distribution()->GetStateKey(), |
| 620 status, string_resource_id, launch_cmd, install_list.get()); | 672 status, string_resource_id, launch_cmd, install_list.get()); |
| 621 } | 673 } |
| 622 if (!install_list->Do()) | 674 if (!install_list->Do()) |
| 623 LOG(ERROR) << "Failed to record installer error information in registry."; | 675 LOG(ERROR) << "Failed to record installer error information in registry."; |
| 624 } | 676 } |
| 625 | 677 |
| 626 } // namespace installer | 678 } // namespace installer |
| OLD | NEW |