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

Side by Side Diff: chrome/installer/setup/uninstall.cc

Issue 218683013: Remove stale code to delete the metro user data dir. It never shipped. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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
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 // 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 10
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 if (!base::IsDirectoryEmpty(path)) 388 if (!base::IsDirectoryEmpty(path))
389 return DELETE_NOT_EMPTY; 389 return DELETE_NOT_EMPTY;
390 390
391 if (base::DeleteFile(path, true)) 391 if (base::DeleteFile(path, true))
392 return DELETE_SUCCEEDED; 392 return DELETE_SUCCEEDED;
393 393
394 LOG(ERROR) << "Failed to delete folder: " << path.value(); 394 LOG(ERROR) << "Failed to delete folder: " << path.value();
395 return DELETE_FAILED; 395 return DELETE_FAILED;
396 } 396 }
397 397
398 void GetLocalStateFolders(const Product& product, 398 base::FilePath GetLocalStateFolder(const Product& product) {
399 std::vector<base::FilePath>* paths) {
400 // Obtain the location of the user profile data. 399 // Obtain the location of the user profile data.
401 product.GetUserDataPaths(paths); 400 base::FilePath local_state_folder = product.GetUserDataPath();
402 LOG_IF(ERROR, paths->empty()) 401 LOG_IF(ERROR, local_state_folder.empty())
403 << "Could not retrieve user's profile directory."; 402 << "Could not retrieve user's profile directory.";
403
404 return local_state_folder;
404 } 405 }
405 406
406 // Creates a copy of the local state file and returns a path to the copy. 407 // Creates a copy of the local state file and returns a path to the copy.
407 base::FilePath BackupLocalStateFile( 408 base::FilePath BackupLocalStateFile(const base::FilePath& local_state_folder) {
408 const std::vector<base::FilePath>& local_state_folders) {
409 base::FilePath backup; 409 base::FilePath backup;
410 410 base::FilePath state_file(
411 // Copy the first local state file that is found. 411 local_state_folder.Append(chrome::kLocalStateFilename));
412 for (size_t i = 0; i < local_state_folders.size(); ++i) { 412 if (!base::CreateTemporaryFile(&backup))
413 const base::FilePath& local_state_folder = local_state_folders[i]; 413 LOG(ERROR) << "Failed to create temporary file for Local State.";
414 base::FilePath state_file( 414 else
415 local_state_folder.Append(chrome::kLocalStateFilename)); 415 base::CopyFile(state_file, backup);
416 if (!base::PathExists(state_file))
417 continue;
418 if (!base::CreateTemporaryFile(&backup))
419 LOG(ERROR) << "Failed to create temporary file for Local State.";
420 else
421 base::CopyFile(state_file, backup);
422 break;
423 }
424 return backup; 416 return backup;
425 } 417 }
426 418
427 // Deletes all user data directories for a product. 419 // Deletes a product's user data directory.
428 DeleteResult DeleteLocalState( 420 DeleteResult DeleteLocalState(const base::FilePath& local_state_folder,
gab 2014/04/02 15:16:57 Why is this called DeleteLocalState if it deletes
grt (UTC plus 2) 2014/04/02 16:53:09 It deletes all locally-stored state (which happens
gab 2014/04/02 17:20:14 Yes that's what I meant, sorry for being unclear :
429 const std::vector<base::FilePath>& local_state_folders, 421 bool schedule_on_failure) {
430 bool schedule_on_failure) { 422 if (local_state_folder.empty())
431 if (local_state_folders.empty())
432 return DELETE_SUCCEEDED; 423 return DELETE_SUCCEEDED;
433 424
434 DeleteResult result = DELETE_SUCCEEDED; 425 DeleteResult result = DELETE_SUCCEEDED;
435 for (size_t i = 0; i < local_state_folders.size(); ++i) { 426 VLOG(1) << "Deleting user profile " << local_state_folder.value();
436 const base::FilePath& user_local_state = local_state_folders[i]; 427 if (!base::DeleteFile(local_state_folder, true)) {
437 VLOG(1) << "Deleting user profile " << user_local_state.value(); 428 LOG(ERROR) << "Failed to delete user profile dir: "
438 if (!base::DeleteFile(user_local_state, true)) { 429 << local_state_folder.value();
439 LOG(ERROR) << "Failed to delete user profile dir: " 430 if (schedule_on_failure) {
440 << user_local_state.value(); 431 ScheduleDirectoryForDeletion(local_state_folder);
441 if (schedule_on_failure) { 432 result = DELETE_REQUIRES_REBOOT;
442 ScheduleDirectoryForDeletion(user_local_state); 433 } else {
443 result = DELETE_REQUIRES_REBOOT; 434 result = DELETE_FAILED;
444 } else {
445 result = DELETE_FAILED;
446 }
447 } 435 }
448 } 436 }
449 437
450 if (result == DELETE_REQUIRES_REBOOT) { 438 if (result == DELETE_REQUIRES_REBOOT) {
451 ScheduleParentAndGrandparentForDeletion(local_state_folders[0]); 439 ScheduleParentAndGrandparentForDeletion(local_state_folder);
452 } else { 440 } else {
453 const base::FilePath user_data_dir(local_state_folders[0].DirName()); 441 const base::FilePath user_data_dir(local_state_folder.DirName());
454 if (!user_data_dir.empty() && 442 if (!user_data_dir.empty() &&
455 DeleteEmptyDir(user_data_dir) == DELETE_SUCCEEDED) { 443 DeleteEmptyDir(user_data_dir) == DELETE_SUCCEEDED) {
456 const base::FilePath product_dir(user_data_dir.DirName()); 444 const base::FilePath product_dir(user_data_dir.DirName());
457 if (!product_dir.empty()) 445 if (!product_dir.empty())
458 DeleteEmptyDir(product_dir); 446 DeleteEmptyDir(product_dir);
459 } 447 }
460 } 448 }
461 449
462 return result; 450 return result;
463 } 451 }
(...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after
1325 1313
1326 // Finally delete all the files from Chrome folder after moving setup.exe 1314 // Finally delete all the files from Chrome folder after moving setup.exe
1327 // and the user's Local State to a temp location. 1315 // and the user's Local State to a temp location.
1328 bool delete_profile = ShouldDeleteProfile(installer_state, cmd_line, status, 1316 bool delete_profile = ShouldDeleteProfile(installer_state, cmd_line, status,
1329 product); 1317 product);
1330 ret = installer::UNINSTALL_SUCCESSFUL; 1318 ret = installer::UNINSTALL_SUCCESSFUL;
1331 1319
1332 // When deleting files, we must make sure that we're either a "single" 1320 // When deleting files, we must make sure that we're either a "single"
1333 // (aka non-multi) installation or we are the Chrome Binaries. 1321 // (aka non-multi) installation or we are the Chrome Binaries.
1334 1322
1335 std::vector<base::FilePath> local_state_folders; 1323 base::FilePath local_state_folder(GetLocalStateFolder(product));
1336 GetLocalStateFolders(product, &local_state_folders); 1324 base::FilePath backup_state_file(BackupLocalStateFile(local_state_folder));
1337 base::FilePath backup_state_file(BackupLocalStateFile(local_state_folders));
1338 1325
1339 if (product.is_chrome_app_host()) { 1326 if (product.is_chrome_app_host()) {
1340 DeleteAppHostFilesAndFolders(installer_state, product_state->version()); 1327 DeleteAppHostFilesAndFolders(installer_state, product_state->version());
1341 } else if (!installer_state.is_multi_install() || 1328 } else if (!installer_state.is_multi_install() ||
1342 product.is_chrome_binaries()) { 1329 product.is_chrome_binaries()) {
1343 DeleteResult delete_result = DeleteChromeFilesAndFolders( 1330 DeleteResult delete_result = DeleteChromeFilesAndFolders(
1344 installer_state, base::MakeAbsoluteFilePath(setup_exe)); 1331 installer_state, base::MakeAbsoluteFilePath(setup_exe));
1345 if (delete_result == DELETE_FAILED) { 1332 if (delete_result == DELETE_FAILED) {
1346 ret = installer::UNINSTALL_FAILED; 1333 ret = installer::UNINSTALL_FAILED;
1347 } else if (delete_result == DELETE_REQUIRES_REBOOT) { 1334 } else if (delete_result == DELETE_REQUIRES_REBOOT) {
1348 ret = installer::UNINSTALL_REQUIRES_REBOOT; 1335 ret = installer::UNINSTALL_REQUIRES_REBOOT;
1349 } 1336 }
1350 } 1337 }
1351 1338
1352 if (delete_profile) 1339 if (delete_profile)
1353 DeleteLocalState(local_state_folders, product.is_chrome_frame()); 1340 DeleteLocalState(local_state_folder, product.is_chrome_frame());
1354 1341
1355 if (!force_uninstall) { 1342 if (!force_uninstall) {
1356 VLOG(1) << "Uninstallation complete. Launching post-uninstall operations."; 1343 VLOG(1) << "Uninstallation complete. Launching post-uninstall operations.";
1357 browser_dist->DoPostUninstallOperations(product_state->version(), 1344 browser_dist->DoPostUninstallOperations(product_state->version(),
1358 backup_state_file, distribution_data); 1345 backup_state_file, distribution_data);
1359 } 1346 }
1360 1347
1361 // Try and delete the preserved local state once the post-install 1348 // Try and delete the preserved local state once the post-install
1362 // operations are complete. 1349 // operations are complete.
1363 if (!backup_state_file.empty()) 1350 if (!backup_state_file.empty())
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 // If we need a reboot to continue, schedule the parent directories for 1421 // If we need a reboot to continue, schedule the parent directories for
1435 // deletion unconditionally. If they are not empty, the session manager 1422 // deletion unconditionally. If they are not empty, the session manager
1436 // will not delete them on reboot. 1423 // will not delete them on reboot.
1437 ScheduleParentAndGrandparentForDeletion(target_path); 1424 ScheduleParentAndGrandparentForDeletion(target_path);
1438 } else if (DeleteChromeDirectoriesIfEmpty(target_path) == DELETE_FAILED) { 1425 } else if (DeleteChromeDirectoriesIfEmpty(target_path) == DELETE_FAILED) {
1439 *uninstall_status = UNINSTALL_FAILED; 1426 *uninstall_status = UNINSTALL_FAILED;
1440 } 1427 }
1441 } 1428 }
1442 1429
1443 } // namespace installer 1430 } // namespace installer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698