| 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 // This file defines the methods useful for uninstalling Chrome. | 5 // This file defines the methods useful for uninstalling Chrome. |
| 6 | 6 |
| 7 #include "chrome/installer/setup/uninstall.h" | 7 #include "chrome/installer/setup/uninstall.h" |
| 8 | 8 |
| 9 #include <windows.h> | 9 #include <windows.h> |
| 10 #include <stddef.h> | 10 #include <stddef.h> |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 original_state.GetProductState(system_level, distribution->GetType()); | 131 original_state.GetProductState(system_level, distribution->GetType()); |
| 132 DCHECK(product_state != NULL); | 132 DCHECK(product_state != NULL); |
| 133 ChannelInfo channel_info; | 133 ChannelInfo channel_info; |
| 134 | 134 |
| 135 // Remove product's flags from the channel value. | 135 // Remove product's flags from the channel value. |
| 136 channel_info.set_value(product_state->channel().value()); | 136 channel_info.set_value(product_state->channel().value()); |
| 137 const bool modified = product.SetChannelFlags(false, &channel_info); | 137 const bool modified = product.SetChannelFlags(false, &channel_info); |
| 138 | 138 |
| 139 // Apply the new channel value to all other products and to the multi package. | 139 // Apply the new channel value to all other products and to the multi package. |
| 140 if (modified) { | 140 if (modified) { |
| 141 scoped_ptr<WorkItemList> | 141 std::unique_ptr<WorkItemList> update_list( |
| 142 update_list(WorkItem::CreateNoRollbackWorkItemList()); | 142 WorkItem::CreateNoRollbackWorkItemList()); |
| 143 std::vector<BrowserDistribution::Type> dist_types; | 143 std::vector<BrowserDistribution::Type> dist_types; |
| 144 for (size_t i = 0; i < BrowserDistribution::NUM_TYPES; ++i) { | 144 for (size_t i = 0; i < BrowserDistribution::NUM_TYPES; ++i) { |
| 145 BrowserDistribution::Type other_dist_type = | 145 BrowserDistribution::Type other_dist_type = |
| 146 static_cast<BrowserDistribution::Type>(i); | 146 static_cast<BrowserDistribution::Type>(i); |
| 147 if (distribution->GetType() != other_dist_type) | 147 if (distribution->GetType() != other_dist_type) |
| 148 dist_types.push_back(other_dist_type); | 148 dist_types.push_back(other_dist_type); |
| 149 } | 149 } |
| 150 AddChannelValueUpdateWorkItems(original_state, installer_state, | 150 AddChannelValueUpdateWorkItems(original_state, installer_state, |
| 151 channel_info, dist_types, | 151 channel_info, dist_types, |
| 152 update_list.get()); | 152 update_list.get()); |
| 153 bool success = update_list->Do(); | 153 bool success = update_list->Do(); |
| 154 LOG_IF(ERROR, !success) << "Failed updating channel values."; | 154 LOG_IF(ERROR, !success) << "Failed updating channel values."; |
| 155 } | 155 } |
| 156 } | 156 } |
| 157 | 157 |
| 158 // Processes uninstall WorkItems from install_worker in no-rollback-list. | 158 // Processes uninstall WorkItems from install_worker in no-rollback-list. |
| 159 void ProcessChromeWorkItems(const InstallerState& installer_state, | 159 void ProcessChromeWorkItems(const InstallerState& installer_state, |
| 160 const Product& product) { | 160 const Product& product) { |
| 161 scoped_ptr<WorkItemList> work_item_list( | 161 std::unique_ptr<WorkItemList> work_item_list( |
| 162 WorkItem::CreateNoRollbackWorkItemList()); | 162 WorkItem::CreateNoRollbackWorkItemList()); |
| 163 AddOsUpgradeWorkItems(installer_state, base::FilePath(), Version(), product, | 163 AddOsUpgradeWorkItems(installer_state, base::FilePath(), Version(), product, |
| 164 work_item_list.get()); | 164 work_item_list.get()); |
| 165 // Perform a best-effort cleanup of per-user keys. On system-level installs | 165 // Perform a best-effort cleanup of per-user keys. On system-level installs |
| 166 // this will only cleanup keys for the user running the uninstall but it was | 166 // this will only cleanup keys for the user running the uninstall but it was |
| 167 // considered that this was good enough (better than triggering Active Setup | 167 // considered that this was good enough (better than triggering Active Setup |
| 168 // for all users solely for this cleanup). | 168 // for all users solely for this cleanup). |
| 169 AddCleanupDeprecatedPerUserRegistrationsWorkItems(product, | 169 AddCleanupDeprecatedPerUserRegistrationsWorkItems(product, |
| 170 work_item_list.get()); | 170 work_item_list.get()); |
| 171 if (!work_item_list->Do()) | 171 if (!work_item_list->Do()) |
| 172 LOG(ERROR) << "Failed to process Chrome WorkItems."; | 172 LOG(ERROR) << "Failed to process Chrome WorkItems."; |
| 173 } | 173 } |
| 174 | 174 |
| 175 void ProcessIELowRightsPolicyWorkItems(const InstallerState& installer_state) { | 175 void ProcessIELowRightsPolicyWorkItems(const InstallerState& installer_state) { |
| 176 scoped_ptr<WorkItemList> work_items(WorkItem::CreateNoRollbackWorkItemList()); | 176 std::unique_ptr<WorkItemList> work_items( |
| 177 WorkItem::CreateNoRollbackWorkItemList()); |
| 177 AddDeleteOldIELowRightsPolicyWorkItems(installer_state, work_items.get()); | 178 AddDeleteOldIELowRightsPolicyWorkItems(installer_state, work_items.get()); |
| 178 work_items->Do(); | 179 work_items->Do(); |
| 179 RefreshElevationPolicy(); | 180 RefreshElevationPolicy(); |
| 180 } | 181 } |
| 181 | 182 |
| 182 void ClearRlzProductState() { | 183 void ClearRlzProductState() { |
| 183 const rlz_lib::AccessPoint points[] = {rlz_lib::CHROME_OMNIBOX, | 184 const rlz_lib::AccessPoint points[] = {rlz_lib::CHROME_OMNIBOX, |
| 184 rlz_lib::CHROME_HOME_PAGE, | 185 rlz_lib::CHROME_HOME_PAGE, |
| 185 rlz_lib::CHROME_APP_LIST, | 186 rlz_lib::CHROME_APP_LIST, |
| 186 rlz_lib::NO_ACCESS_POINT}; | 187 rlz_lib::NO_ACCESS_POINT}; |
| (...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1065 base::string16 ext_association(ShellUtil::kRegClasses); | 1066 base::string16 ext_association(ShellUtil::kRegClasses); |
| 1066 ext_association.append(L"\\"); | 1067 ext_association.append(L"\\"); |
| 1067 ext_association.append(L".crx"); | 1068 ext_association.append(L".crx"); |
| 1068 InstallUtil::DeleteRegistryKey(roots[i], ext_association, | 1069 InstallUtil::DeleteRegistryKey(roots[i], ext_association, |
| 1069 WorkItem::kWow64Default); | 1070 WorkItem::kWow64Default); |
| 1070 } | 1071 } |
| 1071 } | 1072 } |
| 1072 | 1073 |
| 1073 void UninstallFirewallRules(BrowserDistribution* dist, | 1074 void UninstallFirewallRules(BrowserDistribution* dist, |
| 1074 const base::FilePath& chrome_exe) { | 1075 const base::FilePath& chrome_exe) { |
| 1075 scoped_ptr<FirewallManager> manager = | 1076 std::unique_ptr<FirewallManager> manager = |
| 1076 FirewallManager::Create(dist, chrome_exe); | 1077 FirewallManager::Create(dist, chrome_exe); |
| 1077 if (manager) | 1078 if (manager) |
| 1078 manager->RemoveFirewallRules(); | 1079 manager->RemoveFirewallRules(); |
| 1079 } | 1080 } |
| 1080 | 1081 |
| 1081 InstallStatus UninstallProduct(const InstallationState& original_state, | 1082 InstallStatus UninstallProduct(const InstallationState& original_state, |
| 1082 const InstallerState& installer_state, | 1083 const InstallerState& installer_state, |
| 1083 const base::FilePath& setup_exe, | 1084 const base::FilePath& setup_exe, |
| 1084 const Product& product, | 1085 const Product& product, |
| 1085 bool remove_all, | 1086 bool remove_all, |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1287 } | 1288 } |
| 1288 | 1289 |
| 1289 // Unregister any dll servers that we may have registered for this | 1290 // Unregister any dll servers that we may have registered for this |
| 1290 // product. | 1291 // product. |
| 1291 if (product_state != NULL) { | 1292 if (product_state != NULL) { |
| 1292 std::vector<base::FilePath> com_dll_list; | 1293 std::vector<base::FilePath> com_dll_list; |
| 1293 product.AddComDllList(&com_dll_list); | 1294 product.AddComDllList(&com_dll_list); |
| 1294 base::FilePath dll_folder = installer_state.target_path().AppendASCII( | 1295 base::FilePath dll_folder = installer_state.target_path().AppendASCII( |
| 1295 product_state->version().GetString()); | 1296 product_state->version().GetString()); |
| 1296 | 1297 |
| 1297 scoped_ptr<WorkItemList> unreg_work_item_list( | 1298 std::unique_ptr<WorkItemList> unreg_work_item_list( |
| 1298 WorkItem::CreateWorkItemList()); | 1299 WorkItem::CreateWorkItemList()); |
| 1299 | 1300 |
| 1300 AddRegisterComDllWorkItems(dll_folder, | 1301 AddRegisterComDllWorkItems(dll_folder, |
| 1301 com_dll_list, | 1302 com_dll_list, |
| 1302 installer_state.system_install(), | 1303 installer_state.system_install(), |
| 1303 false, // Unregister | 1304 false, // Unregister |
| 1304 true, // May fail | 1305 true, // May fail |
| 1305 unreg_work_item_list.get()); | 1306 unreg_work_item_list.get()); |
| 1306 unreg_work_item_list->Do(); | 1307 unreg_work_item_list->Do(); |
| 1307 } | 1308 } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1430 // If we need a reboot to continue, schedule the parent directories for | 1431 // If we need a reboot to continue, schedule the parent directories for |
| 1431 // deletion unconditionally. If they are not empty, the session manager | 1432 // deletion unconditionally. If they are not empty, the session manager |
| 1432 // will not delete them on reboot. | 1433 // will not delete them on reboot. |
| 1433 ScheduleParentAndGrandparentForDeletion(target_path); | 1434 ScheduleParentAndGrandparentForDeletion(target_path); |
| 1434 } else if (DeleteChromeDirectoriesIfEmpty(target_path) == DELETE_FAILED) { | 1435 } else if (DeleteChromeDirectoriesIfEmpty(target_path) == DELETE_FAILED) { |
| 1435 *uninstall_status = UNINSTALL_FAILED; | 1436 *uninstall_status = UNINSTALL_FAILED; |
| 1436 } | 1437 } |
| 1437 } | 1438 } |
| 1438 | 1439 |
| 1439 } // namespace installer | 1440 } // namespace installer |
| OLD | NEW |