OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 file_util::AppendToPath(&setup_exe, file_util::GetFilenameFromPath(exe_path)); | 169 file_util::AppendToPath(&setup_exe, file_util::GetFilenameFromPath(exe_path)); |
170 | 170 |
171 FilePath temp_file; | 171 FilePath temp_file; |
172 if (!file_util::CreateTemporaryFile(&temp_file)) { | 172 if (!file_util::CreateTemporaryFile(&temp_file)) { |
173 LOG(ERROR) << "Failed to create temporary file for setup.exe."; | 173 LOG(ERROR) << "Failed to create temporary file for setup.exe."; |
174 } else { | 174 } else { |
175 FilePath setup_exe_path = FilePath::FromWStringHack(setup_exe); | 175 FilePath setup_exe_path = FilePath::FromWStringHack(setup_exe); |
176 file_util::Move(setup_exe_path, temp_file); | 176 file_util::Move(setup_exe_path, temp_file); |
177 } | 177 } |
178 | 178 |
| 179 // Obtain the location of the user profile data. Chrome Frame needs to |
| 180 // build this path manually since it doesn't use the Chrome default dir. |
| 181 FilePath user_local_state; |
| 182 #if defined(CHROME_FRAME_BUILD) |
| 183 bool got_local_state = |
| 184 chrome::GetChromeFrameUserDataDirectory(&user_local_state); |
| 185 #else // if !defined(CHROME_FRAME_BUILD) |
| 186 bool got_local_state = chrome::GetDefaultUserDataDirectory(&user_local_state); |
| 187 #endif |
| 188 |
179 // Move the browser's persisted local state | 189 // Move the browser's persisted local state |
180 FilePath user_local_state; | 190 if (got_local_state) { |
181 if (chrome::GetDefaultUserDataDirectory(&user_local_state)) { | |
182 FilePath user_local_file( | 191 FilePath user_local_file( |
183 user_local_state.Append(chrome::kLocalStateFilename)); | 192 user_local_state.Append(chrome::kLocalStateFilename)); |
184 | |
185 FilePath path = FilePath::FromWStringHack(*local_state_path); | 193 FilePath path = FilePath::FromWStringHack(*local_state_path); |
186 if (!file_util::CreateTemporaryFile(&path)) | 194 if (!file_util::CreateTemporaryFile(&path)) |
187 LOG(ERROR) << "Failed to create temporary file for Local State."; | 195 LOG(ERROR) << "Failed to create temporary file for Local State."; |
188 else | 196 else |
189 file_util::CopyFile(user_local_file, path); | 197 file_util::CopyFile(user_local_file, path); |
| 198 } else { |
| 199 LOG(ERROR) << "Could not retrieve user's profile directory."; |
190 } | 200 } |
191 | 201 |
192 DeleteResult result = DELETE_SUCCEEDED; | 202 DeleteResult result = DELETE_SUCCEEDED; |
193 | 203 |
194 LOG(INFO) << "Deleting install path " << install_path; | 204 LOG(INFO) << "Deleting install path " << install_path; |
195 if (!file_util::Delete(install_path, true)) { | 205 if (!file_util::Delete(install_path, true)) { |
196 LOG(ERROR) << "Failed to delete folder (1st try): " << install_path; | 206 LOG(ERROR) << "Failed to delete folder (1st try): " << install_path; |
197 #if defined(CHROME_FRAME_BUILD) | 207 #if defined(CHROME_FRAME_BUILD) |
198 // We don't try killing Chrome processes for Chrome Frame builds since | 208 // We don't try killing Chrome processes for Chrome Frame builds since |
199 // that is unlikely to help. Instead, schedule files for deletion and | 209 // that is unlikely to help. Instead, schedule files for deletion and |
200 // return a value that will trigger a reboot prompt. | 210 // return a value that will trigger a reboot prompt. |
201 ScheduleDirectoryForDeletion(install_path.c_str()); | 211 ScheduleDirectoryForDeletion(install_path.c_str()); |
202 result = DELETE_REQUIRES_REBOOT; | 212 result = DELETE_REQUIRES_REBOOT; |
203 #else | 213 #else |
204 // Try closing any running chrome processes and deleting files once again. | 214 // Try closing any running chrome processes and deleting files once again. |
205 CloseAllChromeProcesses(); | 215 CloseAllChromeProcesses(); |
206 if (!file_util::Delete(install_path, true)) { | 216 if (!file_util::Delete(install_path, true)) { |
207 LOG(ERROR) << "Failed to delete folder (2nd try): " << install_path; | 217 LOG(ERROR) << "Failed to delete folder (2nd try): " << install_path; |
208 result = DELETE_FAILED; | 218 result = DELETE_FAILED; |
209 } | 219 } |
210 #endif | 220 #endif |
211 } | 221 } |
212 | 222 |
213 if (delete_profile) { | 223 if (delete_profile && got_local_state) { |
214 LOG(INFO) << "Deleting user profile" << user_local_state.value(); | 224 LOG(INFO) << "Deleting user profile" << user_local_state.value(); |
215 if (!file_util::Delete(user_local_state, true)) { | 225 if (!file_util::Delete(user_local_state, true)) { |
216 LOG(ERROR) << "Failed to delete user profile dir: " | 226 LOG(ERROR) << "Failed to delete user profile dir: " |
217 << user_local_state.value(); | 227 << user_local_state.value(); |
218 #if defined(CHROME_FRAME_BUILD) | 228 #if defined(CHROME_FRAME_BUILD) |
219 ScheduleDirectoryForDeletion(user_local_state.value().c_str()); | 229 ScheduleDirectoryForDeletion(user_local_state.value().c_str()); |
220 result = DELETE_REQUIRES_REBOOT; | 230 result = DELETE_REQUIRES_REBOOT; |
221 #else | 231 #else |
222 result = DELETE_FAILED; | 232 result = DELETE_FAILED; |
223 #endif | 233 #endif |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 dist->DoPostUninstallOperations(*installed_version, local_state_path, | 524 dist->DoPostUninstallOperations(*installed_version, local_state_path, |
515 distribution_data); | 525 distribution_data); |
516 } | 526 } |
517 | 527 |
518 // Try and delete the preserved local state once the post-install | 528 // Try and delete the preserved local state once the post-install |
519 // operations are complete. | 529 // operations are complete. |
520 if (!local_state_path.empty()) | 530 if (!local_state_path.empty()) |
521 file_util::Delete(local_state_path, false); | 531 file_util::Delete(local_state_path, false); |
522 | 532 |
523 return ret; | 533 return ret; |
524 } | 534 } |
OLD | NEW |